Данная заметка не открывает ни чего нового. Все, что здесь описано можно прочитать в документации к Django. Я лишь постараюсь привести готовый пример для валидации одного поля формы на два разных значения.
Например, нам необходимо получить от пользователя в качестве контакта «email» или «номер телефона». Пользователю требуется заполнить одно поле в форме, указав в нем одни из данных на выбор. Нам же необходимо проверить на серверной стороне что нам пришло и соответствует ли пришедшие данный требованиям.
В Django данное условие реализуется довольно легко с помощью создания собственного поля формы:
# -*- coding: utf-8 -*- | |
from django import forms | |
from django.core.validators import email_re | |
from django.utils.encoding import smart_unicode | |
from django.utils.translation import ugettext_lazy as _ | |
import re | |
# Наше поле для валидации | |
class ContactField(forms.Field): | |
def validate(self, value): | |
super(ContactField, self).validate(value) | |
# Проверяем на соответствие поля "email"у | |
if email_re.search(smart_unicode(value)): | |
pass | |
# Проверяем на соответствие поля телефонному номеру | |
elif re.compile("^([0-9\(\)\/\+ \-]*)$").search(smart_unicode(value)): | |
pass | |
# Если не соответствует ничему, то вызываем ошибку | |
else: | |
raise forms.ValidationError(_(u'Enter a valid email or phone number.'), code='invalid') | |
class MessagesForm(forms.Form): | |
contact = ContactField(required=True) |
Собственно и все. Люблю Django. С ней код получается кратким и локаничным.
Добавить комментарий