Validadores de escritura
Un validador es un invocable que toma un valor y aumenta un ValidationError
si no cumple con algunos criterios. Los validadores pueden resultar útiles para reutilizar la lógica de validación entre diferentes tipos de campos.
Por ejemplo, aquí hay un validador que solo permite números pares:
from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ defvalidate_even(value):if value %2!=0:raise ValidationError( _('%(value)s is not an even number'), params='value': value,)
Puede agregar esto a un campo de modelo a través del campo validators
argumento:
from django.db import models classMyModel(models.Model): even_field = models.IntegerField(validators=[validate_even])
Debido a que los valores se convierten a Python antes de que se ejecuten los validadores, incluso puede usar el mismo validador con formularios:
from django import forms classMyForm(forms.Form): even_field = forms.IntegerField(validators=[validate_even])
También puede utilizar una clase con un __call__()
método para validadores más complejos o configurables. RegexValidator
, por ejemplo, utiliza esta técnica. Si se utiliza un validador basado en clases en el validators
opción de campo de modelo, debe asegurarse de que sea serializable por el marco de migración añadiendo deconstruir () y __eq__()
métodos.
Cómo se ejecutan los validadores
Ver el validación de formulario para obtener más información sobre cómo se ejecutan los validadores en formularios, y Validando objetos por cómo se ejecutan en modelos. Tenga en cuenta que los validadores no se ejecutarán automáticamente cuando guarde un modelo, pero si está utilizando un ModelForm
, ejecutará sus validadores en cualquier campo que esté incluido en su formulario. Ver el Documentación de ModelForm para obtener información sobre cómo la validación del modelo interactúa con los formularios.
Validadores incorporados
los django.core.validators
El módulo contiene una colección de validadores invocables para usar con campos de formulario y modelo. Se usan internamente, pero también están disponibles para usar con sus propios campos. Se pueden utilizar además de, o en lugar de la costumbre field.clean()
métodos.
RegexValidator
class RegexValidator(regex=None, message=None, code=None, inverse_match=None, flags=0)
-
Parámetros: - regex – Que no
None
, anularegex
. Puede ser una expresión regular string o una expresión regular precompilada. - mensaje – Que no
None
, anulamessage
. - código – Que no
None
, anulacode
. - inverse_match – Que no
None
, anulainverse_match
. - banderas – Que no
None
, anulaflags
. En ese caso,regex
debe ser una expresión regular string, oTypeError
es elevado.
A
RegexValidator
busca el proporcionadovalue
para una expresión regular dada conre.search()
. Por defecto, genera unValidationError
conmessage
ycode
si un partido no es fundar. Su comportamiento se puede invertir configurandoinverse_match
paraTrue
, en cuyo caso elValidationError
se levanta cuando un partido es fundar.regex
-
El patrón de expresión regular que se debe buscar en el
value
, utilizandore.search()
. Esto puede ser un string o una expresión regular precompilada creada conre.compile()
. Predeterminado al vacío string, que se encontrará en todos los posiblesvalue
.
message
-
El mensaje de error utilizado por
ValidationError
si la validación falla. Predeterminado a"Enter a valid value"
.
code
-
El código de error utilizado por
ValidationError
si la validación falla. Predeterminado a"invalid"
.
inverse_match
-
El modo de partido para
regex
. Predeterminado aFalse
.
flags
-
los banderas de expresiones regulares utilizado al compilar la expresión regular string
regex
. Siregex
es una expresión regular precompilada yflags
está anulado,TypeError
es elevado. Predeterminado a0
.
- regex – Que no
EmailValidator
class EmailValidator(message=None, code=None, allowlist=None)
-
Parámetros: - mensaje – Que no
None
, anulamessage
. - código – Que no
None
, anulacode
. - lista de permitidos – Que no
None
, anulaallowlist
.
message
-
El mensaje de error utilizado por
ValidationError
si la validación falla. Predeterminado a"Enter a valid email address"
.
code
-
El código de error utilizado por
ValidationError
si la validación falla. Predeterminado a"invalid"
.
allowlist
-
Lista de permitidos de dominios de correo electrónico. De forma predeterminada, una expresión regular (la
domain_regex
attribute) se utiliza para validar lo que aparece después de la@
firmar. Sin embargo, si eso string aparece en elallowlist
, esta validación se omite. Si no se proporciona, el valor predeterminadoallowlist
es['localhost']
. Otros dominios que no contienen un punto no pasarán la validación, por lo que deberá agregarlos alallowlist
según sea necesario.
En desuso desde la versión 3.2: los
whitelist
El parámetro está en desuso. Usarallowlist
en lugar de. El indocumentadodomain_whitelist
attribute es obsoleto. Usardomain_allowlist
en lugar de. - mensaje – Que no
URLValidator
class URLValidator(schemes=None, regex=None, message=None, code=None)
-
A
RegexValidator
subclase que asegura que un valor se parece a una URL y genera un código de error de'invalid'
si no es así.Las direcciones de bucle invertido y los espacios IP reservados se consideran válidos. Direcciones IPv6 literales (RFC 3986 # sección-3.2.2) y dominios Unicode son compatibles.
Además de los argumentos opcionales de su padre
RegexValidator
clase,URLValidator
acepta un extra opcional attribute:schemes
-
Lista de esquemas de URL / URI para validar. Si no se proporciona, la lista predeterminada es
['http', 'https', 'ftp', 'ftps']
. Como referencia, el sitio web de la IANA proporciona una lista completa de esquemas de URI válidos.
validate_email
validate_email
-
Un
EmailValidator
instancia sin ninguna personalización.
validate_slug
validate_slug
-
A
RegexValidator
instancia que asegura que un valor consta solo de letras, números, guiones bajos o guiones.
validate_unicode_slug
validate_unicode_slug
-
A
RegexValidator
instancia que garantiza que un valor consta solo de letras, números, guiones bajos o guiones Unicode.
validate_ipv4_address
validate_ipv4_address
-
A
RegexValidator
instancia que garantiza que un valor se parezca a una dirección IPv4.
validate_ipv6_address
validate_ipv6_address
-
Usos
django.utils.ipv6
para comprobar la validez de una dirección IPv6.
validate_ipv46_address
validate_ipv46_address
-
Usa ambos
validate_ipv4_address
yvalidate_ipv6_address
para asegurarse de que un valor sea una dirección IPv4 o IPv6 válida.
validate_comma_separated_integer_list
validate_comma_separated_integer_list
-
A
RegexValidator
instancia que asegura que un valor es una lista de enteros separados por comas.
int_list_validator
int_list_validator(sep=', ', message=None, code='invalid', allow_negative=False)
-
Devuelve un
RegexValidator
instancia que asegura una string consta de enteros separados porsep
. Permite enteros negativos cuandoallow_negative
esTrue
.
MaxValueValidator
class MaxValueValidator(limit_value, message=None)
-
Plantea un
ValidationError
con un código de'max_value'
sivalue
es mayor quelimit_value
, que puede ser invocable.
MinValueValidator
class MinValueValidator(limit_value, message=None)
-
Plantea un
ValidationError
con un código de'min_value'
sivalue
es menos quelimit_value
, que puede ser invocable.
MaxLengthValidator
class MaxLengthValidator(limit_value, message=None)
-
Plantea un
ValidationError
con un código de'max_length'
si la longitud devalue
es mayor quelimit_value
, que puede ser invocable.
MinLengthValidator
class MinLengthValidator(limit_value, message=None)
-
Plantea un
ValidationError
con un código de'min_length'
si la longitud devalue
es menos quelimit_value
, que puede ser invocable.
DecimalValidator
class DecimalValidator(max_digits, decimal_places)
-
Eleva
ValidationError
con los siguientes códigos:'max_digits'
si el número de dígitos es mayor quemax_digits
.'max_decimal_places'
si el número de decimales es mayor quedecimal_places
.'max_whole_digits'
si el número de dígitos enteros es mayor que la diferencia entremax_digits
ydecimal_places
.
FileExtensionValidator
class FileExtensionValidator(allowed_extensions, message, code)
-
Plantea un
ValidationError
con un código de'invalid_extension'
si la extensión devalue.name
(value
es unFile
) no se encuentra enallowed_extensions
. La extensión se compara sin distinción entre mayúsculas y minúsculas conallowed_extensions
.Advertencia
No confíe en la validación de la extensión del archivo para determinar el tipo de archivo. Se puede cambiar el nombre de los archivos para que tengan cualquier extensión, independientemente de los datos que contengan.
validate_image_file_extension
validate_image_file_extension
-
Utiliza Pillow para asegurar que
value.name
(value
es unFile
) tiene una extensión de imagen válida.
ProhibitNullCharactersValidator
class ProhibitNullCharactersValidator(message=None, code=None)
-
Plantea un
ValidationError
sistr(value)
contiene uno o más caracteres nulos ('x00'
).Parámetros: - mensaje – Que no
None
, anulamessage
. - código – Que no
None
, anulacode
.
message
-
El mensaje de error utilizado por
ValidationError
si la validación falla. Predeterminado a"Null characters are not allowed."
.
code
-
El código de error utilizado por
ValidationError
si la validación falla. Predeterminado a"null_characters_not_allowed"
.
- mensaje – Que no