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
|
2010-05-09 12:26:09 +08:00
|
|
|
|
2010-01-05 14:18:41 +08:00
|
|
|
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
|
2010-01-12 22:58:34 +08:00
|
|
|
how validators are run in forms, and :ref:`Validating objects
|
|
|
|
<validating-objects>` for how they're run in models. Note that validators will
|
|
|
|
not be run automatically when you save a model, but if you are using a
|
|
|
|
``ModelForm``, it will run your validators on any fields that are included in
|
|
|
|
your form. See the :ref:`ModelForm documentation <topics-forms-modelforms>`
|
|
|
|
for information on how model validation interacts with forms.
|
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``
|
|
|
|
------------------
|
|
|
|
|
2010-05-10 20:28:00 +08:00
|
|
|
.. class:: RegexValidator(regex, message=None, code=None)
|
2010-01-05 14:18:41 +08:00
|
|
|
|
2010-05-10 20:28:00 +08:00
|
|
|
.. attribute:: regex
|
2010-01-05 14:18:41 +08:00
|
|
|
|
2010-05-10 20:28:00 +08:00
|
|
|
The regular expression pattern to search for the provided ``value``,
|
|
|
|
or a pre-compiled regular expression. Raises a ``ValidationError``
|
|
|
|
with ``message`` and ``code`` if no match is found.
|
2010-01-05 14:18:41 +08:00
|
|
|
|
2010-05-09 12:26:09 +08:00
|
|
|
.. attribute:: message=None
|
2010-01-05 14:18:41 +08:00
|
|
|
|
2010-05-09 12:26:09 +08:00
|
|
|
The error message used by ``ValidationError`` if validation fails. If no
|
|
|
|
``message`` is specified, a generic ``"Enter a valid value"`` message is used.
|
2010-01-05 14:18:41 +08:00
|
|
|
|
2010-05-09 12:26:09 +08:00
|
|
|
.. attribute:: code=None
|
2010-01-05 14:18:41 +08:00
|
|
|
|
2010-05-09 12:26:09 +08:00
|
|
|
The error code used by ``ValidationError`` if validation fails. If ``code``
|
|
|
|
is not specified, ``"invalid"`` is used.
|
2010-01-05 14:18:41 +08:00
|
|
|
|
|
|
|
``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``.
|