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/23 14:52] enrique_mieza_sanchez [APIs amb Django] |
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: | ||
- | O en la versió amb indentació o " | + | <WRAP info> |
+ | De vegades ens pot interessar una alternativa enviant les dades codificades en base64 en els // | ||
+ | curl -H ' | ||
+ | |||
+ | Per obtenir el //hash// en base64 es pot fer: | ||
+ | echo -n " | ||
+ | </ | ||
+ | |||
+ | <WRAP tip> | ||
+ | O en la versió amb indentació o " | ||
curl -H ' | curl -H ' | ||
+ | </ | ||
<WRAP todo> | <WRAP todo> | ||
Línia 181: | Línia 204: | ||
Per utilitzar el Token: | Per utilitzar el Token: | ||
- | curl -X GET http:// | + | curl http:// |
\\ | \\ | ||
- | ==== Objectes aniuats ==== | + | ===== Objectes aniuats |
<WRAP todo> | <WRAP todo> | ||
Exercici amb objectes aniuats: | Exercici amb objectes aniuats: | ||
Línia 194: | 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(' | ||
+ | ] | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | |||