Creación y uso de serializadores: Django REST Framework

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, 

creating-a-serializer

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: 

deserializing-rest-framework

Publicación traducida automáticamente

Artículo escrito por NaveenArora y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *