184 lines
6.1 KiB
Plaintext
184 lines
6.1 KiB
Plaintext
==========
|
|
Validators
|
|
==========
|
|
|
|
.. versionadded:: 1.2
|
|
.. module:: django.core.validators
|
|
:synopsis: Validation utilities and base classes
|
|
|
|
Writing validators
|
|
==================
|
|
|
|
A validator is a callable that takes a value and raises a
|
|
:exc:`~django.core.exceptions.ValidationError` if it doesn't meet some
|
|
criteria. Validators can be useful for re-using validation logic between
|
|
different types of fields.
|
|
|
|
For example, here's a validator that only allows even numbers::
|
|
|
|
from django.core.exceptions import ValidationError
|
|
|
|
def validate_even(value):
|
|
if value % 2 != 0:
|
|
raise ValidationError(u'%s is not an even number' % value)
|
|
|
|
You can add this to a model field via the field's :attr:`~django.db.models.Field.validators`
|
|
argument::
|
|
|
|
from django.db import models
|
|
|
|
class MyModel(models.Model):
|
|
even_field = models.IntegerField(validators=[validate_even])
|
|
|
|
Because values are converted to Python before validators are run, you can even
|
|
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 :doc:`form validation </ref/forms/validation>` for more information on
|
|
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
|
|
:class:`~django.forms.ModelForm`, it will run your validators on any fields
|
|
that are included in your form. See the
|
|
:doc:`ModelForm documentation </topics/forms/modelforms>` for information on
|
|
how model validation interacts with forms.
|
|
|
|
Built-in validators
|
|
===================
|
|
|
|
The :mod:`django.core.validators` module contains a collection of callable
|
|
validators for use with model and form 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.
|
|
|
|
``RegexValidator``
|
|
------------------
|
|
.. class:: RegexValidator([regex=None, message=None, code=None])
|
|
|
|
:param regex: If not ``None``, overrides :attr:`regex`. Can be a regular
|
|
expression string or a pre-compiled regular expression.
|
|
:param message: If not ``None``, overrides :attr:`.message`.
|
|
:param code: If not ``None``, overrides :attr:`code`.
|
|
|
|
.. attribute:: regex
|
|
|
|
The regular expression pattern to search for the provided ``value``,
|
|
or a pre-compiled regular expression. Raises a
|
|
:exc:`~django.core.exceptions.ValidationError` with :attr:`message`
|
|
and :attr:`code` if no match is found. By default, matches any string
|
|
(including an empty string).
|
|
|
|
.. attribute:: message
|
|
|
|
The error message used by
|
|
:exc:`~django.core.exceptions.ValidationError` if validation fails.
|
|
Defaults to ``"Enter a valid value"``.
|
|
|
|
.. attribute:: code
|
|
|
|
The error code used by :exc:`~django.core.exceptions.ValidationError`
|
|
if validation fails. Defaults to ``"invalid"``.
|
|
|
|
``URLValidator``
|
|
----------------
|
|
.. class:: URLValidator([verify_exists=False, validator_user_agent=URL_VALIDATOR_USER_AGENT])
|
|
|
|
A :class:`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.
|
|
|
|
:param verify_exists: Sets :attr:`verify_exists`. Defaults to ``False``.
|
|
:param validator_user_agent: Sets :attr:`validator_user_agent`. Defaults to
|
|
:setting:`URL_VALIDATOR_USER_AGENT` or, if that setting is set to a
|
|
null value, ``"Django (http://www.djangoproject.com/)"``.
|
|
|
|
.. attribute:: verify_exists
|
|
|
|
If set to ``True``, this validator checks that the URL actually exists.
|
|
|
|
.. attribute:: validator_user_agent
|
|
|
|
If :attr:`verify_exists` is ``True``, Django uses this value as the
|
|
"User-agent" for the request.
|
|
|
|
``validate_email``
|
|
------------------
|
|
.. data:: validate_email
|
|
|
|
A :class:`RegexValidator` instance that ensures a value looks like an
|
|
email address.
|
|
|
|
``validate_slug``
|
|
-----------------
|
|
.. data:: validate_slug
|
|
|
|
A :class:`RegexValidator` instance that ensures a value consists of only
|
|
letters, numbers, underscores or hyphens.
|
|
|
|
``validate_ipv4_address``
|
|
-------------------------
|
|
.. data:: validate_ipv4_address
|
|
|
|
A :class:`RegexValidator` instance that ensures a value looks like an IPv4
|
|
address.
|
|
|
|
``validate_ipv6_address``
|
|
-------------------------
|
|
.. versionadded:: 1.4
|
|
|
|
.. data:: validate_ipv6_address
|
|
|
|
Uses :mod:`django.utils.ipv6` to check the validity of an IPv6 address.
|
|
|
|
``validate_ipv46_address``
|
|
--------------------------
|
|
.. versionadded:: 1.4
|
|
|
|
.. data:: validate_ipv46_address
|
|
|
|
Uses both ``validate_ipv4_address`` and ``validate_ipv6_address`` to
|
|
ensure a value is either a valid IPv4 or IPv6 address.
|
|
|
|
``validate_comma_separated_integer_list``
|
|
-----------------------------------------
|
|
.. data:: validate_comma_separated_integer_list
|
|
|
|
A :class:`RegexValidator` instance that ensures a value is a
|
|
comma-separated list of integers.
|
|
|
|
``MaxValueValidator``
|
|
---------------------
|
|
.. class:: MaxValueValidator(max_value)
|
|
|
|
Raises a :exc:`~django.core.exceptions.ValidationError` with a code of
|
|
``'max_value'`` if ``value`` is greater than ``max_value``.
|
|
|
|
``MinValueValidator``
|
|
---------------------
|
|
.. class:: MinValueValidator(min_value)
|
|
|
|
Raises a :exc:`~django.core.exceptions.ValidationError` with a code of
|
|
``'min_value'`` if ``value`` is less than ``min_value``.
|
|
|
|
``MaxLengthValidator``
|
|
----------------------
|
|
.. class:: MaxLengthValidator(max_length)
|
|
|
|
Raises a :exc:`~django.core.exceptions.ValidationError` with a code of
|
|
``'max_length'`` if the length of ``value`` is greater than ``max_length``.
|
|
|
|
``MinLengthValidator``
|
|
----------------------
|
|
.. class:: MinLengthValidator(min_length)
|
|
|
|
Raises a :exc:`~django.core.exceptions.ValidationError` with a code of
|
|
``'min_length'`` if the length of ``value`` is less than ``min_length``.
|