Ir para o conteúdo

16. Chegou a Hora do REST

A minha maior necessidade para o uso do Django é para trabalhar com API REST.

Para isso, vamos fazer a devida configuração para ativar essa funcionalidade na Tabela: Tarefas que criamos.

Iniciando

Precisamos criar dentro da pasta core três arquivos:

views.py, serializers.py e urls.py

Marcado views.py

1
2
3
4
5
6
7
8
from django.shortcuts import render
from .serializers import *  # ou Tarefa, ...
from rest_framework import viewsets, response

class TarefaViewSet(viewsets.ModelViewSet):

    queryset = Tarefa.objects.all()
    serializer_class = TarefaSerializer

serializers.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from .models import Tarefa
from rest_framework import serializers

class TarefaSerializer(serializers.ModelSerializer):

status_display = serializers.SerializerMethodField()

def get_status_display(self, obj):
  return obj.get_status_display()

class Meta:
        model = Tarefa
        fields = '__all__' # ('descricao', 'status')

urls.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
from django.urls import path, include
from .views import *
from rest_framework import routers

router = routers.DefaultRouter(trailing_slash=True)
router.register('tarefa', TarefaViewSet)

urlpatterns = [
    path('api/', include(router.urls)),
]

Agora, só precisamos referenciar o arquivo core > urls.py do core no arquivo urls.py da aplicação.

O arquivo deverá estar assim:

1
2
3
4
5
6
from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
]

Fazer as alterações para que ele fique assim:

1
2
3
4
5
6
7
8
9
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('api.core.urls')),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    path('rest-auth/', include('rest_auth.urls')),
]

Vamos Testar tudo agora

Para fazer os testes, iremos utilizar o POSTMAN. Como o mesmo é super conhecido, não será necessário explicar como instalá-lo.

Iremos fazer a validação do CRUD através das URLs abaixo:

Autenticação

Antes de tudo, precisamos saber que o sistema estará validando as rotas, ou seja, o usuário deverá estar autenticado para executá-las.

Para isso, precisamos obter através da rota abaixo o TOKEN JWT que será utilizado posteriormente em todas as operações para a realização das outras operações.

http://localhost:8081/rest-auth/login/

Method: POST
url: http://localhost:8081/rest-auth/login/
Headers: Content-Type = application/json
raw
{
    "username": "admin",
    "password": "admin123"
}

Postman - Headers

Preenchimento do Headers

Postman - Post

Preenchimento da requisição

Conforme você viu pela imagem acima, o DJANGO nos retornou o token JWT:

{
    "key": "52825719dbd5d629efef041044ef5edb7707b2c1"
}

Agora basta usarmos ele nas próximas requisições.

http://localhost:8081/api/tarefa

Method: GET
url: http://localhost:8081/api/tarefa
Headers: Authorization = Token 52825719dbd5d629efef041044ef5edb7707b2c1

Postman - Post

Requisição do tipo GET para listar todas as Tarefas

http://localhost:8081/api/tarefa/2/

Method: PUT
url: http://localhost:8081/api/tarefa/2/
Headers: Authorization = Token 52825719dbd5d629efef041044ef5edb7707b2c1

Body: raw
{
    "id": 2,
    "descricao": "Testando edição da Tarefa",
    "status": "P"
}

Postman - Post

Preenchimento dos Headers

Postman - Post

Requisição do tipo PUT para editar a Tarefa de ID = 2

http://localhost:8081/api/tarefa/

Method: POST
url: http://localhost:8081/api/tarefa/
Headers: Authorization = Token 52825719dbd5d629efef041044ef5edb7707b2c1

Body: raw
{
    "descricao": "Demonstrando como cadastrar uma tarefa...",
    "status": "P"
}

Postman - Post

Preenchimento dos Headers

Postman - Post

Requisição do tipo POST para INCLUIR uma nova Tarefa

http://localhost:8081/api/tarefa/2/

Method: DELETE
url: http://localhost:8081/api/tarefa/2/
Headers: Authorization = Token 52825719dbd5d629efef041044ef5edb7707b2c1

Postman - Post

Preenchimento dos Headers

Postman - Post

Requisição do tipo DELETE para deletar a Tarefa de ID = 2 (204 No Content)

Postman - Post

Requisição do tipo DELETE para deletar a Tarefa de ID = 2 retornando em erro 404