2010-01-05 14:18:41 +08:00
|
|
|
.. _ref-validators:
|
|
|
|
|
|
|
|
==========
|
|
|
|
Validators
|
|
|
|
==========
|
|
|
|
|
|
|
|
.. versionadded:: 1.2
|
|
|
|
|
|
|
|
Writing validators
|
|
|
|
==================
|
|
|
|
|
2010-01-10 02:18:25 +08:00
|
|
|
A validator is a callable that takes a value and raises a
|
|
|
|
``ValidationError`` if it doesn't meet some criteria. Validators can be useful
|
|
|
|
for re-using validation logic between different types of fields.
|
2010-01-05 14:18:41 +08:00
|
|
|
|
2010-01-10 02:18:25 +08:00
|
|
|
For example, here's a validator that only allows even numbers::
|
2010-01-05 14:18:41 +08:00
|
|
|
|
|
|
|
from django.core.exceptions import ValidationError
|
|
|
|
|
|
|
|
def validate_even(value):
|
|
|
|
if value % 2 != 0:
|
|
|
|
raise ValidationError(u'%s is not an even number' % value)
|
|
|
|
|
2010-01-10 02:18:25 +08:00
|
|
|
You can add this to a model field via the field's ``validators``
|
2010-01-05 14:18:41 +08:00
|
|
|
argument::
|
|
|
|
|
|
|
|
from django.db import models
|
|
|
|
|
|
|
|
class MyModel(models.Model):
|
|
|
|
even_field = models.IntegerField(validators=[validate_even])
|
|
|
|
|
2010-01-10 02:18:25 +08:00
|
|
|
Because values are converted to Python before validators are run, you can even
|
2010-01-05 14:18:41 +08:00
|
|
|
use the same validator with forms::
|
|
|
|
|
|
|
|
from django import forms
|
|
|
|
|
|
|
|
class MyForm(forms.Form):
|
|
|
|
even_field = forms.IntegerField(validators=[validate_even])
|
|
|
|
|
|
|
|
How validators are run
|
|
|
|
======================
|
|
|
|
|
|
|
|
See the :ref:`form validation <ref-forms-validation>` for more information on
|
|
|
|
how validators are run in forms, and :ref:`Validating objects <validating-objects>`
|
2010-01-10 02:18:25 +08:00
|
|
|
for how they're run in models.
|
2010-01-05 14:18:41 +08:00
|
|
|
|
|
|
|
Built-in validators
|
|
|
|
===================
|
|
|
|
|
|
|
|
Django has a collection of callable validators for use with model and form
|
2010-01-10 02:18:25 +08:00
|
|
|
fields. They're used internally but are available for use with your own fields,
|
|
|
|
too. They can be used in addition to, or in lieu of custom ``field.clean()``
|
|
|
|
methods.
|
2010-01-05 14:18:41 +08:00
|
|
|
|
|
|
|
``RegexValidator``
|
|
|
|
------------------
|
|
|
|
|
|
|
|
.. class:: RegexValidator(regex=None, message=None, code=None)
|
|
|
|
|
|
|
|
.. attribute:: regex=None
|
|
|
|
|
|
|
|
The regular expression to search for the provided ``value``. Raises a
|
|
|
|
``ValidationError`` if no match was found.
|
|
|
|
|
|
|
|
.. attribute:: code='invalid'
|
|
|
|
|
|
|
|
The error code to use if validation fails. Defaults to ``'invalid'``.
|
|
|
|
|
|
|
|
.. attribute:: message=None
|
|
|
|
|
|
|
|
The error message to use if ``regex`` doesn't match the provided ``value``.
|
|
|
|
|
|
|
|
``URLValidator``
|
|
|
|
----------------
|
|
|
|
|
|
|
|
.. class:: URLValidator(verify_exists=False, validator_user_agent=URL_VALIDATOR_USER_AGENT)
|
|
|
|
|
2010-01-10 02:18:25 +08:00
|
|
|
A ``RegexValidator`` that ensures a value looks like a URL and optionally
|
|
|
|
verifies that the URL actually exists (i.e., doesn't return a 404 status code).
|
|
|
|
Raises an error code of ``'invalid'`` if it doesn't look like a URL, and a code
|
|
|
|
of ``'invalid_link'`` if it doesn't exist.
|
2010-01-05 14:18:41 +08:00
|
|
|
|
|
|
|
.. attribute:: verify_exists=False
|
|
|
|
|
2010-01-10 02:18:25 +08:00
|
|
|
If ``verify_exists`` is ``True``, this validator checks that the URL actually
|
2010-01-05 14:18:41 +08:00
|
|
|
exists.
|
|
|
|
|
|
|
|
.. attribute:: validator_user_agent=URL_VALIDATOR_USER_AGENT
|
|
|
|
|
2010-01-10 02:18:25 +08:00
|
|
|
If ``verify_exists`` is ``True``, it uses ``validator_user_agent`` as the "User-agent"
|
|
|
|
for the request. This defaults to ``settings.URL_VALIDATOR_USER_AGENT``.
|
2010-01-05 14:18:41 +08:00
|
|
|
|
|
|
|
``validate_email``
|
|
|
|
------------------
|
|
|
|
|
2010-01-10 02:18:25 +08:00
|
|
|
A ``RegexValidator`` instance that ensures a value looks like an e-mail address.
|
2010-01-05 14:18:41 +08:00
|
|
|
|
|
|
|
``validate_slug``
|
|
|
|
-----------------
|
|
|
|
|
2010-01-10 02:18:25 +08:00
|
|
|
A ``RegexValidator`` instance that ensures a value consists of only letters,
|
|
|
|
numbers, underscores or hyphens.
|
2010-01-05 14:18:41 +08:00
|
|
|
|
|
|
|
``validate_ipv4_address``
|
|
|
|
-------------------------
|
|
|
|
|
|
|
|
A ``RegexValidator`` instance that ensures a value looks like an IPv4 address.
|
|
|
|
|
|
|
|
``validate_comma_separated_integer_list``
|
|
|
|
-----------------------------------------
|
|
|
|
|
2010-01-10 02:18:25 +08:00
|
|
|
A ``RegexValidator`` instance that ensures a value is a comma-separated list
|
2010-01-05 14:18:41 +08:00
|
|
|
of integers.
|
|
|
|
|
|
|
|
``MaxValueValidator``
|
|
|
|
---------------------
|
|
|
|
|
|
|
|
.. class:: MaxValueValidator(max_value)
|
|
|
|
|
|
|
|
Raises a ``ValidationError`` with a code of ``'max_value'`` if ``value`` is
|
|
|
|
greater than ``max_value``.
|
|
|
|
|
|
|
|
``MinValueValidator``
|
|
|
|
---------------------
|
|
|
|
|
|
|
|
.. class:: MinValueValidator(min_value)
|
|
|
|
|
|
|
|
Raises a ``ValidationError`` with a code of ``'min_value'`` if ``value`` is
|
|
|
|
less than ``min_value``.
|
|
|
|
|
|
|
|
``MaxLengthValidator``
|
|
|
|
----------------------
|
|
|
|
|
|
|
|
.. class:: MaxLengthValidator(max_length)
|
|
|
|
|
2010-01-10 02:18:25 +08:00
|
|
|
Raises a ``ValidationError`` with a code of ``'max_length'`` if the length of
|
2010-01-05 14:18:41 +08:00
|
|
|
``value`` is greater than ``max_length``.
|
|
|
|
|
|
|
|
``MinLengthValidator``
|
|
|
|
----------------------
|
|
|
|
|
|
|
|
.. class:: MinLengthValidator(min_length)
|
|
|
|
|
2010-01-10 02:18:25 +08:00
|
|
|
Raises a ``ValidationError`` with a code of ``'min_length'`` if the length of
|
2010-01-05 14:18:41 +08:00
|
|
|
``value`` is less than ``min_length``.
|