Необходимо создать новое представление, которое обрабатывает форму и отправляет email при успешном принятии. Отредактируйте файл views.py приложения blog и добавьте следующий код:
from .forms import EmailPostForm
def post_share(request, post_id):
# Получить пост по id
post = get_object_or_404(Post, id=post_id, status='published')
if request.method == 'POST':
# Форма была отправлена
form = EmailPostForm(request.POST)
if form.is_valid():
# Поля формы прошли проверку
cd = form.cleaned_data
# ... отправить письмо
else:
form = EmailPostForm()
return render(request, 'blog/post/share.html', {'post': post,
'form': form})
Представление работает следующим образом:
- Определяется представление
post_share, которое принимает объектrequestи переменнуюpost_idв качестве параметров - Ярлык
get_object_or_404используется для получения ID поста. Также ярлык проверяет что статус поста —published. - Одно и то же представление используется для отображения изначальной формы и обработки отправленных данных. На основе метода
requestможно понять, были ли данные отправлены с помощью формы или еще нет, а принятие происходит с помощьюPOST. Предполагаем, что если запросGET, то форма будет отображаться пустой, а еслиPOST— форма отправляется и обрабатывается. Таким образом для поиска отличий в сценариях используетсяrequest.method == 'POST'.
Дальше процесс отображения и обработки формы:
- Когда представление изначально загружается с запросом
GET, создается новый экземплярform, который будет использоваться для отображения пустой формы в шаблоне:form = EmailPostForm() - Пользователь заполняет форму и отправляет ее с помощью
POST. Затем создается экземпляр формы с помощью отправленных данных, которые хранятся вrequest.POST:if request.method == 'POST': # Форма была отправлена form = EmailPostForm(request.POST) - После этого отправленные данные проверяются с помощью метода формы
is_valid(). Он проверяет данные и возвращаетTrue, если все поля содержат прошедшие проверку данные. Если где-то указана неправильная информация, методis_valid()возвращаетFalse. Список ошибок проверки можно посмотреть, получив доступ кform.errors. - Если форма не прошла проверку, то она снова рендерится в шаблоне с новыми данными. Ошибки проверки отображаются в шаблоне.
- Если проверка пройдена, доступ к данным можно получить с помощью
form.cleaned_data. Этот атрибут является словарем, где его значения — это поля формы.
Если форма не прошла проверку, в
cleaned_dataбудут только те поля, данные которых подошли.
Теперь нужно узнать, как с помощью Django отправлять email.





