123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- ==========
- 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, [message=None, code=None])
- .. 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.
- .. attribute:: message
- The error message used by :exc:`~django.core.exceptions.ValidationError`
- if validation fails. If no :attr:`.message` is specified, a generic
- ``"Enter a valid value"`` message is used. Default value: ``None``.
- .. attribute:: code
- The error code used by :exc:`~django.core.exceptions.ValidationError`
- if validation fails. If :attr:`.code` is not specified, ``"invalid"``
- is used. Default value: ``None``.
- ``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.
- .. attribute:: verify_exists
- Default value: ``False``. If set to ``True``, this validator checks
- that the URL actually exists.
- .. attribute:: validator_user_agent
- If :attr:`.verify_exists` is ``True``, Django uses the value of
- :attr:`.validator_user_agent` as the "User-agent" for the request. This
- defaults to :setting:`settings.URL_VALIDATOR_USER_AGENT <URL_VALIDATOR_USER_AGENT>`.
- ``validate_email``
- ------------------
- .. data:: validate_email
- A :class:`RegexValidator` instance that ensures a value looks like an
- e-mail 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_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``.
|