Los serializadores en Django REST Framework son responsables de convertir objetos en tipos de datos comprensibles para javascript y marcos front-end. 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. Los dos principales serializadores que se utilizan con más frecuencia son ModelSerializer e HyperLinkedModelSerialzer .
Este artículo gira en torno a cómo usar serializadores desde cero en Django REST Framework para campos y argumentos de serializadores avanzados. Se supone que uno está familiarizado con ¿Cómo iniciar un proyecto con Django REST Framework?
- Creación y uso de serializadores
- ModelSerializerModelSerializer
- Serializador de modelo hipervinculado
- Campos del serializador
- Argumentos centrales en los campos del serializador
Creación y uso de serializadores
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 manera, 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,
Para obtener más información sobre cómo crear y usar un serializador, visite: Creación y uso de serializadores
ModelSerializerModelSerializer
La clase ModelSerializer proporciona un atajo que le permite crear automáticamente una clase Serializer con campos que corresponden a los campos del Modelo.
La clase ModelSerializer es la misma que una clase Serializer regular, excepto que:
- Generará automáticamente un conjunto de campos para usted, según el modelo.
- Generará automáticamente validadores para el serializador, como validadores únicos_juntos.
- Incluye implementaciones predeterminadas simples de .create() y .update().
Sintaxis –
Python3
class SerializerName(serializers.ModelSerializer): class Meta: model = ModelName fields = List of Fields
Ejemplo –
Python3
class AccountSerializer(serializers.ModelSerializer): class Meta: model = Account fields = ['id', 'account_name', 'users', 'created']
De forma predeterminada, todos los campos del modelo en la clase se asignarán a los campos del serializador correspondiente.
Para ver cómo usar ModelSerializer en su proyecto, visite – ModelSerializer en serializadores – Django REST Framework .
HyperlinkedModelSerializerHyperlinkedModelSerializer
La clase HyperlinkedModelSerializer es similar a la clase ModelSerializer excepto que usa hipervínculos para representar relaciones, en lugar de claves principales. De forma predeterminada, el serializador incluirá un campo de URL en lugar de un campo de clave principal. El campo URL se representará mediante un campo serializador HyperlinkedIdentityField y cualquier relación en el modelo se representará mediante un campo serializador HyperlinkedRelatedField.
Sintaxis –
Python3
class SerializerName(serializers.HyperlinkedModelSerializer): class Meta: model = ModelName fields = List of Fields
Ejemplo –
Python3
class AccountSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Account fields = ['id', 'account_name', 'users', 'created']
Para ver cómo usar HyperLinkedModelSerializer en su proyecto, visite – HyperlinkedModelSerializer en serializadores – Django REST Framework .
Campos del serializador
Nombre del campo | Descripción |
---|---|
campo booleano | Un campo booleano utilizado para envolver valores verdaderos o falsos. |
NullBooleanField | Un campo booleano que acepta valores True, False y Null. |
CharField | CharField se utiliza para almacenar la representación de texto. |
Campo de correo electrónico | EmailField también es una representación de texto y valida el texto para que sea una dirección de correo electrónico válida. |
RegexField | Como lo define el nombre, RegexField hace coincidir la string con una expresión regular en particular; de lo contrario, genera un error. |
campo URL | URLField es básicamente un RegexField que valida la entrada contra un patrón de coincidencia de URL. |
campo de babosas | SlugField es un RegexField que valida la entrada contra el patrón [a-zA-Z0-9_-]+. |
CampoDirecciónIP | IPAddressField es un campo que garantiza que la entrada sea una string IPv4 o IPv6 válida. |
CampoEntero | IntegerField es básicamente un campo entero que valida la entrada contra la instancia int de Python. |
campo flotante | FloatField es básicamente un campo flotante que valida la entrada contra la instancia flotante de Python. |
campo decimal | DecimalField es básicamente un campo decimal que valida la entrada contra la instancia decimal de Python. |
Campo de fecha y hora | DateTimeField es un campo serializador utilizado para la representación de fecha y hora. |
campo de fecha | DateField es un campo serializador utilizado para la representación de fechas. |
Campo de tiempo | Timefield es un campo serializador utilizado para la representación del tiempo. |
DuraciónCampo | DurationField es un campo serializador utilizado para la representación de la duración. |
campo de elección | ChoiceField es básicamente un CharField que valida la entrada contra un valor de un conjunto limitado de opciones. |
campo de opción múltiple | MultipleChoiceField es básicamente un CharField que valida la entrada contra un conjunto de cero, uno o muchos valores, elegidos de un conjunto limitado de opciones. |
campo de archivo | FileField es básicamente una representación de archivo. Realiza la validación estándar de FileField de Django. |
campo de imagen | ImageField es una representación de imagen. Valida que el contenido del archivo cargado coincida con un formato de imagen conocido. |
Campo de lista | ListField es básicamente un campo de lista que valida la entrada contra una lista de objetos. |
campo JSON | JSONField es básicamente una clase de campo que valida que la estructura de datos entrantes consiste en primitivas JSON válidas. |
Campo escondido | HiddenField es una clase de campo que no toma un valor basado en la entrada del usuario, sino que toma su valor de un valor predeterminado o invocable. |
DictField | DictField es básicamente un campo de diccionario que valida la entrada contra un diccionario de objetos. |
Argumentos centrales en los campos del serializador
Los campos del serializador en Django son los mismos que los campos de formulario de Django y los campos de modelo de Django y, por lo tanto, requieren ciertos argumentos para manipular el comportamiento de esos campos.
Argumento | Descripción |
---|---|
solo lectura | Establézcalo en True para asegurarse de que el campo se use al serializar una representación, pero no al crear o actualizar una instancia durante la deserialización. |
escribir solamente | Establézcalo en True para asegurarse de que el campo se pueda usar al actualizar o crear una instancia, pero no se incluya al serializar la representación. |
requerido | Establecer esto en False también permite omitir el atributo del objeto o la clave del diccionario de la salida al serializar la instancia. |
defecto | Si se establece, proporciona el valor predeterminado que se utilizará para el campo si no se proporciona ningún valor de entrada. |
permitir nula | Normalmente, se generará un error si se pasa Ninguno a un campo serializador. Establezca este argumento de palabra clave en Verdadero si Ninguno debe considerarse un valor válido. |
fuente | El nombre del atributo que se utilizará para rellenar el campo. |
validadores | Una lista de funciones de validación que deben aplicarse a la entrada de campo entrante y que generan un error de validación o simplemente regresan. |
error de mensajes | Un diccionario de códigos de error a mensajes de error. |
etiqueta | Una string de texto corta que se puede usar como el nombre del campo en campos de formulario HTML u otros elementos descriptivos. |
texto de ayuda | Una string de texto que se puede utilizar como descripción del campo en campos de formulario HTML u otros elementos descriptivos. |
inicial | Un valor que debe usarse para completar previamente el valor de los campos de formulario HTML. |
Publicación traducida automáticamente
Artículo escrito por NaveenArora y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA