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. Cada serializador viene con algunos campos (entradas) que se van a procesar. Por ejemplo, si tiene una clase con el nombre Empleado y sus campos como Employee_id, Employee_name, is_admin, etc. Entonces, necesitará AutoField, CharField y BooleanField para almacenar y manipular datos a través de Django. De manera similar, el serializador también funciona con el mismo principio y tiene campos que se usan para crear un serializador.
Este artículo gira en torno a los campos de string en serializadores en Django REST Framework. Hay tres campos principales: CharField, EmailField y RegexField.
CharField
CharField se utiliza para almacenar la representación de texto. Opcionalmente valida el texto para que sea más corto que max_length y más largo que min_length. Funciona igual que CharField – Django Models .
Tiene los siguientes argumentos:
- max_length : valida que la entrada no contenga más de este número de caracteres.
- min_length : valida que la entrada no contenga menos de este número de caracteres.
- allow_blank : si se establece en True, la string vacía debe considerarse un valor válido. Si se establece en False, la string vacía se considera no válida y generará un error de validación. El valor predeterminado es falso.
- trim_whitespace : si se establece en True, se recortan los espacios en blanco iniciales y finales. El valor predeterminado es Verdadero.
Sintaxis –
field_name = serializers.CharField(*args, **kwargs)
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. Es lo mismo que EmailField – Django Models . Toma todos los argumentos de CharField para las mismas funcionalidades.
Sintaxis –
field_name = serializers.EmailField(*args, **kwargs)
RegexField
Como lo define el nombre, RegexField hace coincidir la string con una expresión regular en particular; de lo contrario, genera un error. Es lo mismo que RegexField – Django Forms . Toma todos los argumentos de CharField para las mismas funcionalidades.
Sintaxis –
field_name = serializers.RegexField(*args, **kwargs)
¿Cómo usar campos de string en serializadores?
Para explicar el uso de campos de string, usemos la misma configuración de proyecto de: ¿ Cómo crear una API básica usando Django Rest Framework? .
Ahora que tiene un archivo llamado serializadores en su proyecto, creemos un serializador con CharField, EmailField y RegexField como campos.
Python3
#import serializer from rest_framework from rest_framework import serializers class Geeks(object): def __init__(self, name, email, phone_number): self.name = name self.email = email self.phone_number = phone_number # create a serializer class GeeksSerializer(serializers.Serializer): # initialize fields name = serializers.CharField(max_length = 200) email = serializers.EmailField() phone_number = serializers.RegexField("[0-9]{10}")
Ahora vamos a crear algunos objetos e intentar serializarlos y verificar si realmente funcionan, Ejecutar, –
Python manage.py shell
Ahora, ejecute los siguientes comandos de python en el shell
# import everything from serializers >>> from apis.serializers import * # create a object of type Geeks >>> obj = Geeks("Naveen", "abc@gmail.com", "1234567890") # serialize the object >>> serializer = GeeksSerializer(obj) # print serialized data >>> serializer.data {'name': 'Naveen', 'email': 'abc@gmail.com', 'phone_number': '1234567890'}
Aquí está el resultado de todas estas operaciones en la terminal:
Validación en campos de string
Tenga en cuenta que el lema principal de estos campos es impartir validaciones, como EmailField valida los datos solo para correo electrónico. Verifiquemos si estas validaciones funcionan o no:
# Create a dictionary and add invalid values >>> data={} >>> data['name']="Naveen" >>> data['email'] = "invalid_email" >>> data['phone_number'] = "invalid_phone" # dictionary created >>> data {'name': 'Naveen', 'email': 'invalid_email', 'phone_number': 'invalid_phone'} # deserialize the data >>> serializer = GeeksSerializer(data=data) # check if data is valid >>> serializer.is_valid() False # check the errors >>> serializer.errors {'email': [ErrorDetail(string='Enter a valid email address.', code='invalid')], 'phone_number': [ErrorDetail(string='This value does not match the required pattern.', code='invalid')]}
Aquí está el resultado de estos comandos que muestra claramente que el correo electrónico y el número de teléfono no son válidos:
Conceptos avanzados
Las validaciones son parte de la deserialización y no de la serialización. Como se explicó anteriormente, la serialización es un proceso de conversión de datos ya creados en otro tipo de datos, por lo que no se requieren estas validaciones predeterminadas. La deserialización requiere validaciones ya que los datos deben guardarse en la base de datos o cualquier otra operación según lo especificado. Entonces, si serializa datos usando estos campos, eso funcionaría.
Argumentos centrales en los campos del serializador
.math-table { borde-colapso: colapsar; ancho: 100%; } .math-table td { borde: 1px sólido #5fb962; alineación de texto: izquierda! importante; relleno: 8px; } .math-table th { borde: 1px sólido #5fb962; relleno: 8px; } .math-table tr>th{ color de fondo: #c6ebd9; alineación vertical: medio; } .math-table tr:nth-child(odd) { background-color: #ffffff; }
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