Обработка форм в представлениях(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.

results matching ""

    No results matching ""