Django Rest Framework
Sobre
Framework utilizado para criar APIs seguindo o padrão Rest.
Settings
INSTALLED_APPS = [
    ...
    'rest_framework',
    ]
Configurando a estrutura de paginação dos responses. Caso deseje alterar a quantidade de itens por página, basta alterar o valor da chave PAGE_SIZE
REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10
    }
Configurando o padrão de filtros da API
REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': [
        'django_filters.rest_framework.DjangoFilterBackend',
        ],
    }
Configurando quais formas de autenticação serão aceitas para consumir os endpoints
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework_simplejwt.authentication.JWTAuthentication',
        ],
    }
Configurando o padrão do parser (deixar o padrão)
REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework_rapidjson.renderers.RapidJSONRenderer',
        ),
    'DEFAULT_PARSER_CLASSES': (
        'rest_framework_rapidjson.parsers.RapidJSONParser',
        ),
    }
Exemplo completo da configuração padrão do projeto
REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': [
        'django_filters.rest_framework.DjangoFilterBackend',
        ],
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework_simplejwt.authentication.JWTAuthentication',
        ],
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 50
    }
Serializer(s)
Exemplo de serializer
class UsuarioSerializer(ModelSerializer):
    """ Class do serializer do model Usuario para os métodos 
    POST, PUT, PATCH, DELETE """
    class Meta:
        model = Usuario
        fields = '__all__'
class UsuarioGETSerializer(FieldsListSerializerMixin, ModelSerializer):
    """ Class do serializer do model Usuario para o método GET """
    class Meta:
        model = Usuario
        fields = '__all__'
View(s) - api_views.py
O decorator @permission_classes([IsAuthenticated, ]) determina que os endpoints só podem ser acessados por usuários que estejam autenticados.
@permission_classes([IsAuthenticated, ])
class UsuarioViewAPI(ModelViewSet):
    """ Classe para gerenciar as requisições da API para os métodos 
    POST, PUT, PATCH e DELETE """
    queryset = Usuario.objects.select_related().all()
    serializer_class = UsuarioSerializer
@permission_classes([IsAuthenticated, ])
class UsuarioGETAPI(OptimizedQuerySetMixin, ReadOnlyModelViewSet):
    """ Classe para gerenciar as requisições da API para o métodos GET
        A lista filterset_fields deve ser configurada com os 
        campos do models que poderão ser utilizados para realizar
        filtros no models como por exemplo 
        nome_do_campo=valor_a_ser_filtrado
        A lista search_fields deve ser configurada com os campos 
        do models que poderão ser utilizados para realizar
        buscas no models como por exemplo search=valor_a_ser_pesquisado
    """
    queryset = Usuario.objects.select_related().all()
    serializer_class = UsuarioGETSerializer
    filter_backend = [filters.SearchFilter]
    filterset_fields = []
    search_fields = []
Url API - api_urls.py
from .api_views import UsuarioViewAPI, UsuarioGETAPI
router = routers.DefaultRouter()
# URL para a API Usuario
# Configurando rota para o endpoint dos métodos POST PUT PATCH DELETE
router.register(r'usuario', UsuarioViewAPI, 'usuario-api')
# Configurando rota para o endpoint do método GET
router.register(r'usuario-get', UsuarioGETAPI, 'usuario-get-api')
urlpatterns = router.urls
Url - urls.py
Para que as rotas sejam identificadas pela respectiva app é necessário adicionar o path abaixo no arquivo urls.py da app
path('api/usuario/', include('usuario.api_urls')),
Links
| Pip | Docs | 
|---|---|
| Pip | Doc |