En Django REST Framework, el concepto mismo de Serialización es convertir datos de base de datos a un tipo de datos que pueda ser utilizado por javascript. Los serializadores permiten convertir datos complejos, como conjuntos de consultas e instancias de modelos, en tipos de datos nativos de Python que luego se pueden representar fácilmente en JSON, XML u otros tipos de contenido. Los serializadores también brindan deserialización, lo que permite que los datos analizados se vuelvan a convertir en tipos complejos, después de validar primero los datos entrantes. Los serializadores en el marco REST funcionan de manera muy similar a las clases Form y ModelForm de Django.
Para verificar cómo configurar Django RESt Framework y crear una visita API: ¿ Cómo crear una API básica usando Django Rest Framework?
Creación de un serializador básico
Para crear un serializador básico, es necesario importar la clase de serializadores desde rest_framework y definir campos para un serializador como si se creara un formulario o modelo en Django.
Ejemplo
Python3
# import serializer from rest_framework from rest_framework import serializers # create a serializer class CommentSerializer(serializers.Serializer): # initialize fields email = serializers.EmailField() content = serializers.CharField(max_length = 200) created = serializers.DateTimeField()
De esta forma, se puede declarar el serializador para cualquier entidad u objeto en particular según los campos requeridos. Los serializadores se pueden utilizar para serializar y deserializar los datos.
Uso de Serializer para serializar datos
Ahora se puede usar CommentSerializer para serializar un comentario o una lista de comentarios. Una vez más, usar la clase Serializer se parece mucho a usar una clase Form. Primero creemos una clase de comentario para crear un objeto de tipo comentario que pueda ser entendido por nuestro serializador.
Python3
# import datetime object from datetime import datetime # create a class class Comment(object): def __init__(self, email, content, created = None): self.email = email self.content = content self.created = created or datetime.now() # create a object comment = Comment(email ='leila@example.com', content ='foo bar')
Ahora que nuestro objeto está listo, intentemos serializar este objeto de comentario. Ejecute el siguiente comando,
Python manage.py shell
Ahora ejecuta el siguiente código
# import comment serializer >>> from apis.serializers import CommentSerializer # import datetime for date and time >>> from datetime import datetime # create a object >>> class Comment(object): ... def __init__(self, email, content, created=None): ... self.email = email ... self.content = content ... self.created = created or datetime.now() ... # create a comment object >>> comment = Comment(email='leila@example.com', content='foo bar') # serialize the data >>> serializer = CommentSerializer(comment) # print serialized data >>> serializer.data
Ahora vamos a comprobar la salida de esto,
Podemos convertir estos datos a formato JSON o XML utilizando las funciones integradas de Python o los analizadores de Rest Framework.
Python3
# import JSON Renderer from rest_framework.renderers import JSONRenderer # convert data to JSON json = JSONRenderer().render(serializer.data)
Uso de Serializer para deserializar datos
La deserialización es similar a la serialización. Significa convertir los datos del formato JSON a un tipo de datos dado. Primero, analizamos una transmisión en tipos de datos nativos de Python… (definimos a qué tipo de datos deserializar…).
Primero, necesitamos convertir estos datos json nuevamente en datos que el serializador pueda entender para deserializar,
Python3
import io from rest_framework.parsers import JSONParser stream = io.BytesIO(json) data = JSONParser().parse(stream)
y ahora vamos a deserializar los datos a su estado original
Python3
serializer = CommentSerializer(data = data) serializer.is_valid() # True serializer.validated_data
Verifiquemos la salida y si los datos han sido deserializados:
Publicación traducida automáticamente
Artículo escrito por NaveenArora y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA