O Django tem muitas peças em movimento. Este post é uma referência para os padrões que você usa repetidamente: models, views, templates, o ORM, migrations, o painel admin e o DRF.
TL;DR: Uma referência Django cobrindo models, consultas ORM, views, URLs, templates, migrations, admin e o básico do Django REST Framework.
Stack: Python, Django, Django REST Framework
Nível: Iniciante
Tempo de leitura: ~15 min
Instalar Django, criar projeto e app
pip install django
django-admin startproject meuprojeto .
python manage.py startapp meuapp
Configurar conexão com banco
# Instalar driver para PostgreSQL (Ubuntu)
sudo apt-get install libpq-dev
pip install psycopg2-binary
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'admin',
'PASSWORD': '123456',
'HOST': 'localhost',
'PORT': '5432',
}
}
# Rodar migrations
python3 manage.py makemigrations
python3 manage.py migrate
python manage.py createsuperuser
Django REST Framework
pip install djangorestframework
# settings.py
INSTALLED_APPS = [
...
'rest_framework',
]
View (APIView)
from rest_framework.response import Response
from rest_framework import status
from rest_framework.views import APIView
class AddInstrumentView(APIView):
def post(self, request):
name = request.data.get('name')
if name is None:
return Response({"message": "nome é obrigatório"}, status=status.HTTP_400_BAD_REQUEST)
use_case_request = AddInstrumentRequest(name=name)
use_case = AddInstrument()
use_case_response = use_case.execute(use_case_request)
return Response({"name": use_case_response.name}, status=status.HTTP_200_OK)
Casos de uso e protocolos
from app.models import Instrument
class AddInstrument:
def execute(self, request):
instrument = Instrument.objects.create(name=request.name)
return instrument
class AddInstrumentRequest:
def __init__(self, name: str):
self.name = name
class AddInstrumentResponse:
def __init__(self, name: str):
self.name = name
Rotas
# project/urls.py
urlpatterns = [
path("admin/", admin.site.urls),
path('api/', include('presentation.urls')),
]
# presentation/urls.py
urlpatterns = [
path('add-instrument', AddInstrumentView.as_view()),
path('list-instruments', ListInstrumentView.as_view()),
]
Autenticação JWT
pip install djangorestframework-simplejwt
# settings.py
REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES": (
"rest_framework_simplejwt.authentication.JWTAuthentication",
),
}
SIMPLE_JWT = {
"ACCESS_TOKEN_LIFETIME": timedelta(days=1),
"REFRESH_TOKEN_LIFETIME": timedelta(days=1),
"ROTATE_REFRESH_TOKENS": True,
"BLACKLIST_AFTER_ROTATION": True,
"AUTH_HEADER_TYPES": ("Bearer",),
}
O que você construiu
Uma referência completa de Django cobrindo o framework desde os models até padrões prontos para produção. Volte aqui quando precisar de um padrão Django específico rapidamente.
Próximos passos
- Use select_related() para relacionamentos ForeignKey e OneToOne para evitar queries N+1, e prefetch_related() para ManyToMany e ForeignKey reverso.
- Use signals do Django (post_save, pre_delete) para efeitos colaterais que devem acontecer após operações de model, mantendo views e lógica de negócio limpos.
- Habilite o Django Debug Toolbar em desenvolvimento para ver todas as queries SQL por requisição. A maioria dos problemas de performance no Django é relacionada ao banco.
Dúvidas ou feedback? Me encontre no LinkedIn ou GitHub.