Django 5 для начинающих

Прогресс по курсу:  9/1004

6.4 Рекомендация постов по электронной почте
4 из 7 шагов пройдено
0 из 9 баллов  получено

Работа с формами в представлениях

Мы определили форму для рекомендации постов по электронной почте. Теперь требуется представление, чтобы создавать экземпляр формы и работать с передачей формы на обработку.

Отредактируйте файл views.py приложения blog, добавив следующий ниже исходный код:

from .forms import EmailPostForm


def post_share(request, post_id):
    # Извлечь пост по идентификатору id
    post = get_object_or_404(Post,
                             id=post_id,
                             status=Post.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.

Одно и то же представление используется как для отображения изначальной формы на странице, так и для обработки представленных для валидации данных.

HTTP-метод request позволяет различать случаи, когда форма передается на обработку.

Запрос GET будет указывать на то, что пользователю должна быть отображена пустая форма, а запрос POST – на то, что форма передается на обработку.

Булево выражение request.method == 'POST' используется для того, чтобы проводить различие между этими двумя сценариями.

Ниже описывается процесс отображения формы на странице и работы с передачей формы на обработку:

1. Когда страница загружается в первый раз, представление получает запрос GET. В этом случае создается новый экземпляр класса EmailPostForm, который сохраняется в переменной form. Указанный экземпляр формы будет использоваться для отображения пустой формы в шаблоне: 

form = EmailPostForm()

2. Когда пользователь заполняет форму и передает ее методом POST на обработку, создается экземпляр формы с использованием переданных данных, содержащихся в request.POST:

if request.method == 'POST':
    # Форма была передана на обработку
    form = EmailPostForm(request.POST)

3. После этого переданные данные валидируются методом is_valid() формы. Указанный метод проверяет допустимость введенных в форму данных и возвращает значение True, если все поля содержат валидные данные. Если какое-либо поле содержит не валидные данные, то is_valid() возвращает значение False. Список ошибок валидации можно получить посредством form.errors.

4. Если форма не валидна, то форма снова прорисовывается в шаблоне, включая переданные данные. Ошибки валидации будут отображены в шаблоне.

5. Если форма валидна, то валидированные данные извлекаются посредством form.cleaned_data. Указанный атрибут представляет собой словарь полей формы и их значений.


Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий
Нет обсуждений. Начните первое.