Workshop de Introdução ao Django
Owlficinas (PET-SI) e Semana de Sistemas de Informação (SSI)
Este workshop foi organizado pela Semana de Sistemas de Informação (SSI) com apoio do PET-SI para os membros de Infraestrutura da SSI e estudantes da EACH-USP com o pré-requisito de conhecimentos em lógica de programação.
Ao finalizar o curso, você:
- Criará sua primeira API utilizando Django
- Implementará seu primeiro banco de dados
- Entenderá sobre a arquitetura de servidores e clientes
- Instalar ferramentas
- Python3
- Django
- Servidores Web
- Projeto e Aplicação
- 💡 Desafio: criar um projeto Django
- 💡 Desafio: criar uma aplicação Django
- Criando primeiro fluxo
- 💡 Desafio: Criar uma view
- 💡 Desafio: Criar uma url
- Banco de dados
- 💡 Desafio: Criação das tabelas
- Fluxo com parâmetros
- 💡 Desafio: criar fluxo com parâmetros
- CRUD
- 💡 Desafio: Read
- 💡 Desafio: Create
- 💡 Desafio: Delete
- 💡 Desafio: Update
- Comandos mais utilizados
- Rodar projeto Django
- Trocar de branch
- Verificar alterações
Verificar se já veio instalado
python --version
Instalar:
python -m pip install Django
Verificar se foi instalado:
python -m django --version
Comunicação: por meio de troca de mensagens
Projeto Django: um conjunto de aplicações. Aplicações: serviços que vão estar rodando no servidor.
🌱 Branch: etapa0
django-admin startproject saphira
Diretórios e arquivos criados:
Rodar projeto:
Abrir diretório do arquivo manage.py
cd /workspaces/workshop-django/saphira/
``
python manage.py runserver
🌱 Branch: etapa1
python manage.py startapp api
Estrutura de diretórios criada:
Principais arquivos: urls e views
Configurações em saphira/settings.py
🌱 Branch: etapa2
Arquivo: api/views.py
import datetime
from django.http import HttpResponse, JsonResponse
def get_datetime(request):
return JsonResponse({"datetime": datetime.datetime.utcnow()})
Arquivo: api/urls.py
from django.urls import path
from . import views
urlpatterns = [
path("", views.get_datetime, name="get_datetime"),
]
from django.urls import include
path("api/", include("api.urls"))
🌱 Branch: etapa3
As configurações do banco de dados estão em saphira/settings.py
Adicionar aplicação api no projeto Saphira settings.py
:
api.apps.ApiConfig
Adicionar tabelas do banco de dados: api/models.py
from django.db import models
class Usuario(models.Model):
nomeCompleto = models.CharField(max_length=200)
email = models.EmailField()
cpf = models.CharField(max_length=14)
class Palestra(models.Model):
titulo = models.CharField(max_length=200)
descricao = models.TextField()
class Presenca(models.Model):
usuario = models.ForeignKey(Usuario, on_delete=models.CASCADE)
palestra = models.ForeignKey(Palestra, on_delete=models.CASCADE)
presencial = models.BooleanField(default=False)
Make migration: informar ao Django que foram realizadas alterações no banco de dados.
python manage.py makemigrations api
Ver alterações feita pela migração:
python3 manage.py sqlmigrate api 0001
Fazer migração:
python manage.py migrate
🌱 Branch: etapa4
Adicionar uma nova url api/urls.py
path("texto/<texto>", views.get_texto, name="get_texto")
Adicionar uma nova view views.py
def get_texto(request, texto):
return HttpResponse("O texto escolhido foi '{}'".format(texto))
🌱 Branch: etapa5
Objetivo: pegar todos os usuários cadastrados no banco de dados
Adicionar uma nova url api/urls.py
path("usuarios", views.get_usuarios, name="get_usuarios")
Adicionar uma nova view api/views.py
from .models import *
def get_usuarios(request):
usuarios = Usuario.objects.all().values('nomeCompleto', 'cpf', 'email')
resposta = "= BANCO DE DADOS =\n"
for usuario in usuarios:
resposta += f"Nome: {usuario['nomeCompleto']}, CPF: {usuario['cpf']}, E-mail: {usuario['email']}\n"
return HttpResponse(resposta, content_type="text/plain")
🌱 Branch: etapa6
Request Parameters
/api?email=franciscoogjr@usp.br&nomeCompleto=Francisco%20Gomes
Adicionar uma nova url api/urls.py
path("usuario/add", views.add_usuario, name="add_usuario")
Adicionar uma nova view api/views.py
def add_usuario(request):
nomeCompleto = request.GET['nomeCompleto']
email = request.GET['email']
cpf = request.GET['cpf']
novo_usuario = Usuario(nomeCompleto=nomeCompleto, email=email, cpf=cpf)
novo_usuario.save()
return JsonResponse({'mensagem':f'{nomeCompleto} cadastrado'})
Nova rota:
api/usuario/add?nomeCompleto=&email=&cpf=
🌱 Branch: etapa7
path("usuario/delete/<cpf>", views.delete_usuario, name="delete_usuario")
Adicionar uma nova view api/views.py
def delete_usuario(request, cpf):
usuario = Usuario.objects.get(cpf=cpf)
nomeCompleto = usuario.nomeCompleto
usuario.delete()
return HttpResponse("Usuario {} deletado com sucesso".format(nomeCompleto))
🌱 Branch: etapa8
path("usuario/update/<cpf>", views.update_usuario, name="update_usuario")
def update_usuario(request, cpf):
novo_email = request.GET['email']
Usuario.objects.filter(cpf=cpf).update(email=novo_email)
return HttpResponse("Dados do usuario atualizado")
Entrada no diretório do arquivo manage.py
:
cd /workspaces/workshop-django/saphira/
Comando runserver ``
python manage.py runserver
git checkout <nome_da_branch>
git diff