Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
| Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
|
django_api [2022/02/24 09:47] enrique_mieza_sanchez [BasicAuthentication] |
django_api [2025/02/05 23:49] (actual) enric_mieza_sanchez [APIs amb Django] |
||
|---|---|---|---|
| Línia 10: | Línia 10: | ||
| * [[https:// | * [[https:// | ||
| * [[https:// | * [[https:// | ||
| + | * [[Django Ninja]] en aquesta wiki, per implementar APIs de forma similar a FastAPI. | ||
| - | {{tag> #FpInfor #DawMp07 #DawMp07Uf4 # | + | {{tag> |
| \\ | \\ | ||
| Línia 21: | Línia 22: | ||
| Aquestes crides AJAX es poden resoldre amb una simple [[https:// | Aquestes crides AJAX es poden resoldre amb una simple [[https:// | ||
| - | Per exemple, seguint el tutorial de Django " | + | Per exemple, seguint el tutorial de Django " |
| - | <file python | + | <file python |
| from django.http import JsonResponse | from django.http import JsonResponse | ||
| from polls.models import * | from polls.models import * | ||
| Línia 30: | Línia 31: | ||
| def get_questions(request): | def get_questions(request): | ||
| - | | + | |
| return JsonResponse({ | return JsonResponse({ | ||
| " | " | ||
| - | " | + | " |
| }, safe=False) | }, safe=False) | ||
| </ | </ | ||
| + | |||
| + | <WRAP info> | ||
| + | Observa bé què cal per poder serialitzar els objectes del model: | ||
| + | jsonData = list( Question.objects.all().values() ) | ||
| + | |||
| + | - Tenim un queryset de Questions | ||
| + | - Seleccionem només els valors amb '' | ||
| + | - Transformem en una llista amb '' | ||
| + | </ | ||
| Recorda que abans caldrà que implementis un // | Recorda que abans caldrà que implementis un // | ||
| Línia 42: | Línia 52: | ||
| from django.urls import path | from django.urls import path | ||
| - | from . import views | + | from . import views, api |
| urlpatterns = [ | urlpatterns = [ | ||
| path('', | path('', | ||
| #... | #... | ||
| - | path(' | + | path(' |
| ] | ] | ||
| </ | </ | ||
| Línia 55: | Línia 65: | ||
| {" | {" | ||
| + | <WRAP tip> | ||
| Si voleu un //pretty print// del JSON a la línia de comandes podeu fer: | Si voleu un //pretty print// del JSON a la línia de comandes podeu fer: | ||
| $ curl localhost: | $ curl localhost: | ||
| Línia 60: | Línia 71: | ||
| I per acabar-ho d' | I per acabar-ho d' | ||
| $ curl localhost: | $ curl localhost: | ||
| + | </ | ||
| El //browser// sempre és un tiro segur molt còmode: | El //browser// sempre és un tiro segur molt còmode: | ||
| Línia 88: | Línia 100: | ||
| <WRAP tip> | <WRAP tip> | ||
| + | == Decorator @user_passes_test == | ||
| Existeixen altres // | Existeixen altres // | ||
| </ | </ | ||
| Línia 129: | Línia 142: | ||
| curl -u admin: | curl -u admin: | ||
| + | <WRAP info> | ||
| De vegades ens pot interessar una alternativa enviant les dades codificades en base64 en els // | De vegades ens pot interessar una alternativa enviant les dades codificades en base64 en els // | ||
| curl -H ' | curl -H ' | ||
| Línia 134: | Línia 148: | ||
| Per obtenir el //hash// en base64 es pot fer: | Per obtenir el //hash// en base64 es pot fer: | ||
| echo -n " | echo -n " | ||
| + | </ | ||
| - | O en la versió amb indentació o " | + | <WRAP tip> |
| + | O en la versió amb indentació o " | ||
| curl -H ' | curl -H ' | ||
| + | </ | ||
| <WRAP todo> | <WRAP todo> | ||
| Línia 191: | Línia 208: | ||
| \\ | \\ | ||
| - | ==== Objectes aniuats ==== | + | ===== Objectes aniuats |
| <WRAP todo> | <WRAP todo> | ||
| Exercici amb objectes aniuats: | Exercici amb objectes aniuats: | ||
| Línia 200: | Línia 217: | ||
| \\ | \\ | ||
| + | |||
| + | ===== URLs personalitzades amb TokenAuthentication del REST framework ===== | ||
| + | |||
| + | Si volem fer les nostres pròpies URLs per a la API i volem afegir-hi algun dels mètdodes d' | ||
| + | |||
| + | <code python> | ||
| + | from rest_framework.authentication import TokenAuthentication, | ||
| + | from rest_framework.permissions import IsAuthenticated | ||
| + | from rest_framework.decorators import api_view, authentication_classes, | ||
| + | from django.http import JsonResponse | ||
| + | |||
| + | @api_view([' | ||
| + | @authentication_classes([TokenAuthentication, | ||
| + | @permission_classes([IsAuthenticated]) | ||
| + | def pin_request(request): | ||
| + | return JsonResponse({ | ||
| + | " | ||
| + | " | ||
| + | }) | ||
| + | |||
| + | urlpatterns += [ | ||
| + | path(' | ||
| + | ] | ||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | |||