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
Postar um comentário