Создание форм с Django
Начнем с создания формы для отправки постов по email. Джанго имеет встроенные механизмы(forms framework), позволяющие легко создавать формы. Forms framework позволяет определить поля формы, указать способ их отображения и указать, как они должны проверять входные данные.
Django имеет два базовых класса для построения форм:
- Form: позволяет создавать стандартные формы
- ModelForm: позволяет создавать формы для создания или обновления экземпляров модели
Для начала создайте файл forms.py внутри вашего приложения 'blog', и отредактируйте его следующим образом:
from django import forms
class EmailPostForm(forms.Form):
name = forms.CharField(max_length=25)
email = forms.EmailField()
to = forms.EmailField()
comments = forms.CharField(required=False,
widget=forms.Textarea)
Это твоя первая форма Джанго. Рассмотрим код: мы создали форму путем наследования базового класса Form. Мы используем различные типы полей Джанго для их валидации.
Формы могут располагаться в любом месте проекта Джанго, но соглашение гласит, что их необходимо поместить в forms.py файл для каждого приложения.
Поле name является текстовым полем CharField. Этот тип поля отображается в HTML как<input type="text">
. Каждый тип поля имеет графический элемент по умолчанию, который определяет, как это поле отображается в HTML. Графический элемент по умолчанию может быть переопределен атрибутом widget. В поле comments используется графический элемент textarea для отображения его в виде HTML-элемента<textarea>
, а не <input>
Валидация полей также зависит от типа поля. Например, поля email и to являются EmailField. Для обоих полей требуется допустимый адрес электронной почты, в противном случае валидация получит ValidationError исключение и форма не будет отправляться. Другие параметры также принимаются во внимание при проверке формы: мы определим максимальную длину 25 символов для поля name и сделали поле comments необязательным с required = false. Все это также учитывается при валидации. Типы полей, используемые в этой форме, являются частью полей "Джанго". Список всех доступных полей формы можно посмотреть здесь: https://docs.djangoproject.com/en/1.8/ref/forms/fields/