O Django é um framework robusto que segue o padrão MVT (Model-View-Template). Este guia aborda os conceitos fundamentais para estabelecer o fluxo de dados entre o front-end e o banco de dados, além de detalhar as configurações necessárias para um ambiente de desenvolvimento funcional.
Gerenciamento de Arquivos Estáticos
Arquivos como CSS, JavaScript e imagens são fundamentais para a interface. No Django, organizamos esses recursos em um diretório geralmente chamado static. Para que o servidor consiga entregar esses arquivos, é necessário configurar o arquivo settings.py.
# settings.py
STATIC_URL = '/static/'
STATICFILES_DIRS = [
BASE_DIR / "static",
]
Para referenciar esses arquivos nos templates HTML de forma dinâmica, utilizamos a tag {% load static %}. Isso garante que, se o prefixo da URL mudar na configuração, o link no HTML será atualizado automaticamente.
{% load static %}
<link rel="stylesheet" href="{% static 'css/main_style.css' %}">
<script src="{% static 'js/core_scripts.js' %}"></script>
Manipulação de Formulários e Requisições
O envio de dados do usuário para o servidor ocorre primariamente via formulários HTML, utilizando os atributos action e method.
- GET: Os dados são anexados à URL (ex:
?id=10&tipo=admin). É ideal para buscas e filtros, mas possui limitação de tamanho. - POST: Os dados são enviados no corpo da requisição. É o método seguro para envio de informações sensíveis, como senhas ou grandes volumes de dados.
O Objeto Request
No Django, cada view recebe um objeto request que encapsula os metadados da requisição. Podemos acessar os parâmetros enviados através de atributos específicos:
def processar_dados(request):
metodo = request.method # Retorna 'GET' ou 'POST'
if metodo == 'POST':
# Obtém um valor único
usuario = request.POST.get('username')
# Obtém uma lista de valores (como em checkboxes)
selecionados = request.POST.getlist('items')
return render(request, 'index.html')
Configuração e Integração com Banco de Dados
Embora o Django venha configurado com SQLite por padrão, projetos em produção geralmente utilizam sistemas como MySQL ou PostgreSQL. A alteração é feita no dicionário DATABASES:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'nome_do_banco',
'USER': 'admin_user',
'PASSWORD': 'strong_password',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
Para conectar ao MySQL usando Python 3, recomenda-se a instalação do pacote mysqlclient.
Mapeametno Objeto-Relacional (ORM)
O ORM do Django permite interagir com o banco de dados utilizando sintaxe Python em vez de SQL puro. Classes representam tabelas e instâncias representam registros.
Definição de Modelos
# models.py
from django.db import models
class Colaborador(models.Model):
id_func = models.AutoField(primary_key=True)
nome_completo = models.CharField(max_length=100)
idade = models.IntegerField()
email = models.EmailField(unique=True)
Após definir o modelo, é necessário sincronizar a estrutura com o banco de dados através dos comandos de migração:
python manage.py makemigrations # Gera o plano de alteração
python manage.py migrate # Aplica as alterações no banco
Implementação Prática: Fluxo de CRUD
Abaixo, um exemplo de como estruturar operações de listagem, inserção e edição em um sistema de gestão simples.
1. Roteamento (urls.py)
from django.urls import path
from . import views
urlpatterns = [
path('lista/', views.listar_colaboradores, name='url_lista'),
path('cadastro/', views.salvar_novo, name='url_cadastro'),
path('editar/<int:pk>/', views.atualizar_dados, name='url_editar'),
]
2. Lógica de Visualização (views.py)
from django.shortcuts import render, redirect
from .models import Colaborador
def salvar_novo(request):
if request.method == 'POST':
Colaborador.objects.create(
nome_completo=request.POST.get('nome'),
idade=request.POST.get('idade'),
email=request.POST.get('email')
)
return redirect('url_lista')
return render(request, 'form_cadastro.html')
def listar_colaboradores(request):
items = Colaborador.objects.all()
return render(request, 'lista.html', {'colaboradores': items})
3. Template com Tags de Loop
<table>
<thead>
<tr><th>Nome</th><th>Ações</th></tr>
</thead>
<tbody>
{% for pessoa in colaboradores %}
<tr>
<td>{{ pessoa.nome_completo }}</td>
<td>
<a href="{% url 'url_editar' pessoa.id_func %}">Editar</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
Arquitetura de Processamento de Requisições
O ciclo de vida de uma requisição no Django segue este fluxo:
- O navegador envia uma requisição HTTP.
- O Web Server Gateway Interface (WSGI/ASGI) recebe o tráfego.
- O Middleware processa a requisição (segurança, sessões, CSRF).
- O URLconf direciona para a View correspondente.
- A View interage com o Model (Banco de Dados) e renderiza o Template.
- A resposta HTTP é enviada de volta ao cliente.