# Validation utilities

To ease the process of validating user registration data, django-registration includes some validation-related data and utilities in `registration.validators`.

The available error messages are:

`registration.validators.``DUPLICATE_EMAIL`

  Error message raised by `RegistrationFormUniqueEmail` when the supplied email address is not unique.

`registration.validators.``FREE_EMAIL`

  Error message raised by `RegistrationFormNoFreeEmail` when the supplied email address is rejected by its list of free-email domains.

`registration.validators.``RESERVED_NAME`

  Error message raised by `ReservedNameValidator` when it is given a value that is a reserved name.

`registration.validators.``TOS_REQUIRED`

  Error message raised by `RegistrationFormTermsOfService` when the terms-of-service field is not checked.

All of these error messages are marked for translation; most have translations into multiple languages already in django-registration.

Additionally, one custom validator is provided:

class `registration.validators.``ReservedNameValidator`

  A custom validator (see Django’s validators documentation) which prohibits the use of a reserved name as the value.

  By default, this validator is applied to the username field of `registration.forms.RegistrationForm` and all of its subclasses. The validator is applied in a form-level `clean()` method on `RegistrationForm`, so to remove it (not recommended), simply subclass `RegistrationForm` and override `clean()`. For no custom form-level validation, you could simply implement it as:

      def clean(self):
          pass

  If you want to supply your own custom list of reserved names, you can subclass `RegistrationForm` and set the attribute `reserved_names` to the list of values you want to disallow.

  Note

  Why reserved names are reserved

  Many Web applications enable per-user URLs (to display account information), and some may also create email addresses or even subdomains, based on a user’s username. While this is often useful, it also represents a risk: a user might register a name which conflicts with an important URL, email address or subdomain, and this might give that user control over it.

  django-registration includes a list of reserved names, and rejects them as usernames by default, in order to avoid this issue.

  The default list of reserved names, if you don’t specify one, is `DEFAULT_RESERVED_NAMES`. The validator will also reject any value beginning with the string `".well-known"` (see RFC 5785).

Several constants are provided which are used by this validator:

`registration.validators.``SPECIAL_HOSTNAMES`

  A list of hostnames with reserved or special meaning (such as “autoconfig”, used by some email clients to automatically discover configuration data for a domain).

`registration.validators.``PROTOCOL_HOSTNAMES`

  A list of protocol-specific hostnames sites commonly want to reserve, such as “www” and “mail”.

`registration.validators.``CA_ADDRESSES`

  A list of email usernames commonly used by certificate authorities when verifying identity.

`registration.validators.``RFC_2142`

  A list of common email usernames specified by RFC 2142.

`registration.validators.``NOREPLY_ADDRESSES`

  A list of common email usernames used for automated messages from a Web site (such as “noreply” and “mailer-daemon”).

`registration.validators.``SENSITIVE_FILENAMES`

  A list of common filenames with important meanings, such that usernames should not be allowed to conflict with them (such as “favicon.ico” and “robots.txt”).

`registration.validators.``OTHER_SENSITIVE_NAMES`

  Other names, not covered by the above lists, which have the potential to conflict with common URLs or subdomains, such as “blog” and “docs”.

`registration.validators.``DEFAULT_RESERVED_NAMES`

  A list made of the concatentation of all of the above lists, used as the default set of reserved names for `ReservedNameValidator`.