Django Rest Framework

 

Introdução


pip install djangorestframework

Add 'rest_framework'to your INSTALLED_APPS  setting.


INSTALLED_APPS = [
...
'rest_framework',
]

Urls.py config


from apps.api.viewsets import CorretoraViewSet, PlanoViewSet, ClienteViewSet
from apps.app.models import Cliente

router = routers.DefaultRouter()
router.register(r'plano', PlanoViewSet)
router.register(r'corretora', CorretoraViewSet)
router.register(r'cliente', ClienteViewSet, basename=Cliente)

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

Serializers


class PlanoSerializer(serializers.ModelSerializer):
class Meta:
model = Plano
fields = ('idplano', 'nome', 'num_max_negocios', 'preco', 'ativo', )

Viewsets


class PlanoViewSet(viewsets.ModelViewSet):
queryset = Plano.objects.all()
serializer_class = PlanoSerializer


Lookup field


lookup_fields = ['idplano', 'username'] #precisa ser um identificador único, lembrar.


Conhecer as implementações


# def list(self, request, *args, **kwargs):
# pass

def create(self, request, *args, **kwargs):
return super(ClienteViewSet, self).create(request, *args, **kwargs) ## herda o comportamento padrão

# def update(self, request, *args, **kwargs):
# pass
#
# def partial_update(self, request, *args, **kwargs):
# pass

Realizando a busca por parâmetro


def get_queryset(self):
param_plano = self.request.query_params['plano'] # retornando através do filtro queryset > query_params
# http://127.0.0.1:8000/api/plano/?plano=starter
queryset = Plano.objects.filter(nome__icontains=param_plano)
return queryset

Enviando dados pela request

def get_queryset(self, *args, **kwargs):
param_idcorretora = self.request.data.get('corretora')
queryset = Cliente.objects.filter(idcorretora=param_idcorretora)[:100]
return queryset

Django-filter


Search-filter


Autenticação


A autenticação verifica a identidade digital do usuário, ou seja, processo de verificação de uma identidade. Em termos mais simples, é quando o usuário prova de fato quem ele é.

Autorização


Por sua vez, a autorização é o processo que ocorre após ser validada a autenticação. Diz respeito aos privilégios que são concedidos a determinado usuário ao utilizar uma aplicação.


Geração de Token


python manage.py drf_create_token admin

Adição do authtoken


em Settings.py adicionar linha em INSTALLED_APPS....
...[ 'rest_framework.authtoken',
]


from rest_framework.authtoken import views

urlpatterns = [
path('api/', include(router.urls)),
path('api-token-auth/', views.obtain_auth_token), # adicionar

para testar passar o username e password na body com o endpoint http://127.0.0.1:8000/api-token-auth/









Link para dicas diretas caso precise de uma boa revisão sobre o assunto.
https://juliawu.medium.com/django-cheatsheet-33813d71b84b



ler esse material https://betterprogramming.pub/how-to-use-drf-serializers-effectively-dc58edc73998


Introdução ao Postman

https://rodrigoreisf.com.br/2018/02/16/testando-sua-api-web-com-postman/

Implementando api via api.py

# arquivo api.py

from rest_framework import generics
from rest_framework.response import Response
from .serializers import PlanoSerializer
from .models import Plano


class PlanoApi(generics.ListCreateAPIView):
queryset = Plano.objects.all()
serializer_class = PlanoSerializer


# arquivo urls.py da aplicação
path('api/planos2', PlanoApi.as_view(), name='api_plano2'),


Uma outra abordagem definindo o get e o post manualmente:

For example, if we were using cURL, the command would be something like this:

curl http://127.0.0.1:8000/hello/ -H 'Authorization: Token 9054f7aa9305e012b3c2300408c3dfdf390fcddf'

But now that we have the TokenAuthentication in place, let’s try to make another request to our /hello/ endpoint:

http http://127.0.0.1:8000/hello/

Python requests call:

import requests

url = 'http://127.0.0.1:8000/hello/'
headers = {'Authorization': 'Token 9054f7aa9305e012b3c2300408c3dfdf390fcddf'}
r = requests.get(url, headers=headers)

Ver material

Comentários

Postagens mais visitadas deste blog

Weasyprint

Models - Django

Django Mask with JQuery Mask Plugin