Главная | Архив новостей | Общение | Площадка | Примеры OpenID
Хостинг Django от «Джино»
Оглавление

Собственные правила проверки

Представьте, что мы выложили форму на боевой сервер и к нам начали приходить сообщения. Но есть одна проблема — некоторые сообщения содержат всего одно-два слова, что недостаточно для нашей цели. Мы решили применить новую политику проверки: четыре слова или больше, пожалуйста.

Существует ряд методов реализации собственного механизма проверки в форме. Если наше правило будет использоваться в других проектах, мы может создать собственный тип поля. Большинство пользовательских проверок не используются повторно, хотя и могут быть внедрены в класс Form.

Раз нам требуется дополнительная проверка поля message, добавим метод clean_message() в наш класс:

from django import forms

class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    email = forms.EmailField(required=False)
    message = forms.CharField(widget=forms.Textarea)

    def clean_message(self):
        message = self.cleaned_data['message']
        num_words = len(message.split())
        if num_words < 4:
            raise forms.ValidationError("Not enough words!")
        return message

Библиотека автоматически ищет любой метод, который начинается с clean_ и заканчивается на имя поля. Если такой метод существует, он используется во время выполнения проверки поля.

Данные метод clean_message() будет вызван после выполнения стандартной проверки для данного поля (в этом случае, необходимая проверка для CharField). Так как значение поля уже будет частично проверено, мы получаем его из self.cleaned_data. Также, нам не стоит беспокоиться о наличии значения или о том, что оно пустое, всё это обеспечит стандартный обработчик.

Мы просто используем комбинацию len() и split() для подсчёта количества слов. Если пользователь ввёл слишком мало слов, мы вызываем исключение ValidationError модуля forms. Строка, переданная исключению, будет отображена пользователю в виде элемента списка ошибок.

Важно то, что мы явно возвращаем обработанное значение поля в конце метода. Это позволяет нам модифицировать значение (или преобразовать его в другой тип Python) в рамкам данного метода. Если мы забудем воспользоваться оператором return, тогда будет возвращёт None и оригинальное значение будет утеряно.


Увидели ошибку?
Выделите её мышкой и нажмите
Ctrl-Enter
Обработано:
1049 49 130 71

Версия книги
1.0 2.0
Версия 2.0 в процессе перевода!

Мой луч
Многообразие света

Полезное
Актуальные вакансии, Python работа для python-разработчиков.


Скачать в формате
CHM от 2 сентября

Заказать PDF файл можно через почту, чат, джаббер. Всего 2WMZ. Содержимое точно соответствует содержимому сайта.
Чем чаще заказываете — тем больше перевожу.

Русская группа

на поддержку перевода
Яндекс Яндекс.Деньги Хочу такую же кнопку
Ускорить процесс перевода!
R130494980980
Z425285133788
E112528079659
U327380922061

Книга помогла реализовать:
Проект «Мой луч»
АРМ УФМС.


Мой вебсайт стоит666 337,31 руб

© 2008-2009 Ruslan Popov @ gmail.com Powered by Django 1.1 beta 1 SVN-11114
Главная | Архив новостей | Общение | Площадка | Примеры OpenID