Inizierò con le serie . La vista e i viewet sono classi in DRF, dove avviene la maggior parte della logica dell'applicazione.
Es. ModelViewSet è responsabile della classe per le operazioni CRUD in risposta ai metodi POST, PUT, PATCH, GET, DELETE HTTP.
Consente di dare un'occhiata al metodo di creazione predefinito da https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/mixins.py questo metodo crea l'istanza del modello, dai dati (se sono validi) invia tramite il metodo POST HTTP e li mantiene nel database.
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
def perform_create(self, serializer):
serializer.save()
Questo è che cosa sta accadendo qui.
self.get_serializer() creare una nuova istanza di serializzatore (si imposta prima la classe serializzatore), richiede request.data come argomento. request.data è (è importatore) dizionario . Il dizionario è struttura dati python generica.
serializer.is_valid() verifica dei metodi se request.data sono validi. Se sì, è possibile accedere a serializer.data - anche un dizionario.
serializer.save() metodo crea e mantiene l'istanza effettiva del modello (Snippet) nel database. È possibile accedere direttamente a esempio come questo
instance = serializer.save()
Poi ritorni oggetto Response popolato con serializer.data nuovo al cliente.
Come si può vedere, c'è no Dati modulo, JSON, XML, HTML ecc. Nella serie di viste. Si lavora con i tipi di dati Python e il serializzatore è responsabile del dizionario "traslatorio" su istanza del modello specifico e all'indietro. Ma il client invia dati (nel tuo caso) nella richiesta HTTP in forma di JSON.
JSONParser è responsabile della conversione di JSON nel dizionario. L'analisi è implementata all'interno della classe di richiesta https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/request.py, si prega di notare che non è il modello HttpRequest standard di django.
È possibile impostare più parser, quindi la richiesta sceglierà quella corretta in base all'intestazione della richiesta HTTP: Tipo di contenuto.
La seconda cosa è, è necessario restituire serializer.data al client in forma di JSON, non dizionario. Ecco cosa fa JSONRenderer. Converte dict in JSON e viene implementato all'interno della classe di risposta https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/response.py. Inoltre è possibile impostare più renderer e quindi scegliere quello giusto in base all'intestazione http del tipo di media accettato.
Esempio di definizione completa viewset potrebbe essere:
from snippets.models import Snippet
from snippets.serializers import SnippetSerializer
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser
class SnippetViewSet(viewsets.ModelViewSet):
queryset = Snippet.objects.all()
serializer_class = SnippetSerializer
renderer_classes = (JSONRenderer,)
parser_classes = (JSONParser,)
serializzazione è la conversione di un oggetto in una stringa JSON (nel caso) e deserializzazione è il processo inverso. Cosa stai chiedendo esattamente? – Selcuk
Sì, la stessa cosa, ma in un modo più elaborato ... Conosco la definizione di libro ma non ho una buona comprensione per lo stesso. –