Блог на Django #19: Создание форм, для отправки email

В прошлом разделе было создано базовое приложение блога. Теперь пришло время превратить его в полнофункциональный блог с продвинутыми функциями, такими как возможность делиться постами по email, добавлять комментарии, проставлять теги и получать похожие посты. Дальше речь пойдет о следующих темах:

  • Отправка email с помощью Django
  • Создание форм и обработка их в представлениях
  • Создание форм из моделей
  • Интеграция сторонних приложений
  • Построение сложных QuerySet

Делиться постами

В первую очередь нужно предоставить пользователям возможность делиться постами с помощью email. Подумайте о том, как использовать представления, URL и шаблоны для создания такой функциональности. Теперь необходимо разобраться с тем, что понадобится для того, чтобы у пользователей была возможность делиться постами по email. Требуется следующее:

  • Создать форму для пользователей, где они будут указывать свои имя и электронный адрес, email получателя и дополнительные комментарии.
  • Создать представление в файле views.py, которое будет обрабатывать данные и отправлять сообщение.
  • Добавить URL-шаблон для нового представления в файле urls.py приложения блога.
  • Создать шаблон для отображения формы.

Создание форм в Django

Начнем с создания формы, используемой чтобы делиться постами. В Django есть встроенный фреймворк форм, который позволяет легко их создавать. С его помощью достаточно лишь определить поля, выбрать тип их отображения и указать, как они будут проверять полученные данные. Этот фреймворк обеспечивает гибкий рендеринг форм и обработку данных.

В 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)

Это ваша первая форма Django. Ознакомьтесь с кодом. Форма была создана посредством наследования класса Form. Здесь были использованы другие типы полей, чтобы Django правильно их проверял.

Формы могут быть где угодно в проекте Django. Но принято сохранять их в файле forms.py для каждого приложения.

Тип поля nameCharField. Он отрисовывается как HTML-элемент <input type="text">. У каждого типа поля есть виджет по умолчанию, определяющий, как поле рендерится в HTML. Виджет по умолчанию может быть перезаписан с помощью атрибута widget. В поле comments используется виджет Textarea для отображения HTML-элемента <textarea> вместо стандартного <input>.

Проверка поля зависит от его типа. Например, поля email и to — это поля EmailField. Обе требуют действительной электронной почты. В противном случае будет вызвано исключение forms.ValidationError, и проверка не пройдет. Другие параметры тоже учитываются: максимальная длина поля name может быть 25 символов, а поле comments можно сделать опциональным с помощью required=False. Все это учитывается при проверке. Типы полей в этой форме — это лишь часть из общей массы. С целым списком можно ознакомиться здесь: https://docs.djangoproject.com/en/2.0/ref/forms/fields/.