⚡
VITORLAB
>Home>Projects>Workbench>Blog
GitHubLinkedIn
status: building
>Home>Projects>Workbench>Blog
status: building

Connect

Let's build something together

Always interested in collaborations, interesting problems, and conversations about code, design, and everything in between.

send a signal→

Find me elsewhere

GitHub
@neuxxkk
LinkedIn
/in/vitornms
Email
vitornms@gmail.com
WhatsApp
+55 31 98415-2360
Forged with& code

© 2026 VITORLAB — All experiments reserved

back to blog
backend

Padroes de API REST com Django e DRF

Boas praticas para construir APIs REST com Django Rest Framework. Serializers, viewsets, autenticacao e paginacao.

VN

Vitor Neuenschwander

CS Student & Developer

Sep 12, 202411 min
#python#django#rest-api#backend

Por que Django REST Framework?

DRF e o padrao da industria para construir APIs em Python. Combina a robustez do Django com ferramentas especificas para APIs REST.

Estrutura do Projeto

myproject/

api/

__init__.py

models.py

serializers.py

views.py

urls.py

permissions.py

myproject/

settings.py

urls.py

Models

from django.db import models

class Project(models.Model):

title = models.CharField(max_length=200)

description = models.TextField()

tech_stack = models.JSONField(default=list)

github_url = models.URLField(blank=True)

status = models.CharField(

max_length=20,

choices=[

('planning', 'Planning'),

('in_progress', 'In Progress'),

('completed', 'Completed'),

],

default='planning'

)

created_at = models.DateTimeField(auto_now_add=True)

updated_at = models.DateTimeField(auto_now=True)

class Meta:

ordering = ['-created_at']

Serializers

from rest_framework import serializers

from .models import Project

class ProjectSerializer(serializers.ModelSerializer):

class Meta:

model = Project

fields = '__all__'

read_only_fields = ['created_at', 'updated_at']

def validate_title(self, value):

if len(value) < 3:

raise serializers.ValidationError(

"Titulo deve ter pelo menos 3 caracteres"

)

return value

ViewSets

from rest_framework import viewsets, filters

from rest_framework.pagination import PageNumberPagination

from .models import Project

from .serializers import ProjectSerializer

class StandardPagination(PageNumberPagination):

page_size = 10

page_size_query_param = 'page_size'

max_page_size = 100

class ProjectViewSet(viewsets.ModelViewSet):

queryset = Project.objects.all()

serializer_class = ProjectSerializer

pagination_class = StandardPagination

filter_backends = [filters.SearchFilter, filters.OrderingFilter]

search_fields = ['title', 'description']

ordering_fields = ['created_at', 'title']

Autenticacao

settings.py

REST_FRAMEWORK = {

'DEFAULT_AUTHENTICATION_CLASSES': [

'rest_framework.authentication.TokenAuthentication',

],

'DEFAULT_PERMISSION_CLASSES': [

'rest_framework.permissions.IsAuthenticatedOrReadOnly',

],

}

Boas Praticas

  • Versionamento: Use prefixo /api/v1/ nas URLs
  • Paginacao: Sempre pagine listagens
  • Validacao: Use serializers para validar dados
  • Testes: Teste cada endpoint com pytest
  • Conclusao

    DRF oferece todas as ferramentas para construir APIs profissionais. Seguindo esses padroes, voce garante consistencia e manutenibilidade no seu projeto.

    share
    share:
    [RELATED_POSTS]

    Continue Reading

    ai

    Construindo uma Rede Neural do Zero em Python

    Implementacao de um perceptron multi-camada sem frameworks. Entendendo backpropagation, gradient descent e funcoes de ativacao na pratica.

    Nov 20, 2024•12 min
    algorithms

    Algoritmos de Grafos para Programacao Competitiva

    BFS, DFS, Dijkstra e Kruskal implementados em Python e C. Preparacao para a OBI e competicoes de programacao.

    Oct 5, 2024•15 min