Обработка форм в представлениях(view)
Необходимо создать новое представление, которое обрабатывает форму и отправляет сообщение на электронную почту. Измените файл views.py приложения блога и добавьте в него следующий код:
from .forms import EmailPostForm
def post_share(request, post_id):
# Retrieve post by id
post = get_object_or_404(Post, id=post_id, status='published')
if request.method == 'POST':
# Form was submitted
form = EmailPostForm(request.POST)
if form.is_valid():
# Form fields passed validation
cd = form.cleaned_data
# ... send email
else:
form = EmailPostForm()
return render(request, 'blog/post/share.html', {'post': post,
'form': form})
Это представление работает следующим образом:
- Мы определим представление post_share, которое принимает в себя request и post_id в качестве параметров.
- Мы используем get_object_or_404() для извлечения публикации по идентификатору и проверяем, что полученная запись имеет статус published.
- Мы используем одно и то же представление для отображения начальной формы и обработки отправленных данных. Мы различим, если форма была отправлена или не основана на методе request. Мы собираемся отправить форму с помощью метода POST. Мы полагаем, что получив запрос GET, будет отображаться пустая форма, и если мы получим запрос на POST, то форма будет отправлена и должна быть обработана. Поэтому мы используем request.method == 'POST' для различения двух сценариев.
Ниже приведен процесс отображения и обработки формы.
- Когда представление загружается изначально с запросом GET, мы создаем новый экземпляр формы, который будет использоваться для отображения пустой формы в шаблоне: form = EmailPostForm()
- Пользователь заполняет форму и отправляет ее через POST. Затем мы создаем экземпляр формы, используя отправленные данные, содержащиеся в request.POST:
if request.method == 'POST':
# Form was submitted
form = EmailPostForm(request.POST)
- После этого мы проверяем отправленные данные с помощью метода формы is_valid(). Этот метод проверяет данные, представленные в форме, и возвращает значение true, если все поля содержат допустимые данные. Если какое-либо поле содержит недопустимые данные, то is_valid() возвращает значение false. Список ошибок проверки можно просмотреть, обратившись к form.errors.
- Если форма невалидна, то форма в шаблоне снова визуализируется с отправленными данными. В шаблоне будут отображаться ошибки валидации.
- Если форма является валидной, мы получаем проверенные данные с доступом к form.cleaned_data. Этот атрибут представляет собой словарь полей форм и их значений
Если данные формы не валидные, cleaned_data будет содержать только валидные поля.
Теперь вам нужно узнать, как отправлять электронную почту с Django.