Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
from django import forms
import re
class ContactForm(forms.Form):
"Пусть это некоторая форма обратной связи - для выяснения состояния заказа"
name = forms.CharField(label=u"Ваше имя", max_length=100)
# Поле может быть необязательным для заполнения (required=False)
company = forms.CharField(label="Название вашей организации", required=False)
text = forms.CharField(label=u"Текст вопроса", widget=forms.Textarea)
email = forms.EmailField(label=u"E-mail для ответа")
order = forms.CharField(label=u"Код заказа")
def is_valid_order(self, order):
# здесь проверяется код заказа и выдаётся True или False
def clean_order(self):
"""Функция, дополнительно проверяющая поле "order". Она может
также изменить значение поля - например, отформатировав его.
В данном случае, из кода заказа исключаются начальные и конечные пробелы,
а сам заказ проверяется методом is_valid_order, включенным прямо в форму.
"""
order = self.cleaned_data['order']
order = order.strip() # Немного форматируем
if self.is_valid_order(order):
raise forms.ValidationError(u"Вы ошиблись в коде заказа.")
return order
def process_form(request):
if request.method == "POST":
form = ContactForm(request.POST)
if form.is_valid():
# Используем данные формы, например, просто выдадим их в косоль:
for key,value in form.cleaned_data.items():
print key, ":", value
# Кстати, в form.cleaned_data лежат уже не просто строки, а реальные данные
# соответствующих типов - int, datetime, unicode и т.п.
else:
form = ContactForm()
...
class ContactForm(forms.Form):
subject = forms.CharField(max_length=100)
message = forms.CharField()
sender = forms.EmailField()
cc_myself = forms.BooleanField(required=False)
def clean_subject(self):
data = self.cleaned_data['subject ']
if 'msg#' not in data:
raise ValidationError, 'Поле subject должно содержать номер сообщения'
используются исключения (exceptions) на этапе бизнес валидации. Важно помнить, что ошибки валидации данных != ошибкам работы приложения;
Серверная валидация пользовательских данных