В прошлом разделе было создано базовое приложение блога. Теперь пришло время превратить его в полнофункциональный блог с продвинутыми функциями, такими как возможность делиться постами по 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
для каждого приложения.
Тип поля name
— CharField
. Он отрисовывается как 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/.