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

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

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

Рекомендация постов по электронной почте

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

Найдите минутку, чтобы подумать о том, как можно бы использовать представления, URL-адреса и шаблоны для создания этой функциональности, используя то, что вы узнали в разделе 4.1 "Работа с формами".

Для того чтобы дать пользователям возможность делиться постами по электронной почте, необходимо:

  • создать форму, в которой пользователи должны заполнить свое имя,

  • адрес электронной почты, адрес электронной почты получателя и опциональные комментарии;

  • создать представление в файле views.py, которое обрабатывает опубликованные данные и отправляет электронное письмо;

  • добавить шаблон URL-адреса нового представления в файл urls.py приложения blog;

  • создать шаблон отображения формы.

 

Разработка форм с помощью Django

Давайте начнем с разработки формы, позволяющей делиться постами. Django имеет встроенный фреймворк форм, который позволяет легко создавать формы. Фреймворк форм упрощает определение полей формы, указывает их внешний вид на странице и способы валидации ими входных данных.

Встроенный в Django фреймворк форм предлагает гибкий способ прорисовки форм в исходном коде HTML и оперирования данными. Мы уже изучили теорию, давайте перейдем к практике.

Django поставляется с двумя базовыми классами для разработки форм:

  • Form: позволяет компоновать стандартные формы путем определения полей и валидаций;

  • ModelForm: позволяет компоновать формы, привязанные к экземплярам модели. Он предоставляет все функциональности базового класса Form, но поля формы можно объявлять явным образом или автоматически генерировать из полей модели. Форму можно использовать для создания либо редактирования экземпляров модели.

Сначала внутри каталога приложения blog создайте файл forms.py и добавьте в него следующий ниже исходный код: 

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. Форма EmailPostForm наследует от базового класса Form. Мы используем различные типы полей, чтобы выполнять валидацию данных в соответствии с ними.

Форма содержит следующие ниже поля:

  • name: экземпляр класса CharField с максимальной длиной 25 символов, который будет использоваться для имени человека, отправляющего пост;

  • email: экземпляр класса EmailField. Здесь используется адрес электронной почты человека, отправившего рекомендуемый пост;

  • to: экземпляр класса EmailField. Здесь используется адрес электронной почты получателя, который будет получать электронное письмо с рекомендуемым постом;

  • comments: экземпляр класса CharField. Он используется для комментариев, которые будут вставляться в электронное письмо с рекомендуемым постом. Это поле сделано опциональным путем установки required равным значению False, при этом был задан конкретно-прикладной виджет прорисовки поля.

 У каждого типа поля есть заранее заданный виджет, который определяет то, как поле прорисовывается в исходном коде HTML.

Поле name является экземпляром класса CharField. Поле этого типа прорисовывается как HTML-элемент <input type="text">.

Заранее заданный виджет можно переопределять посредством атрибута widget.

В поле comments используется виджет Textarea, чтобы отображать его как HTML-элемент <textarea> вместо используемого по умолчанию элемента <input>.

Валидация полей также зависит от типа полей. Например, поля email и to являются полями типа EmailField.
Для обоих полей требуется валидный адрес электронной почты; в противном случае валидация поля вызовет исключение forms.ValidationError, и форма не пройдет валидацию.

При валидации полей формы также принимаются во внимание и другие параметры, такие как поле name, имеющее максимальную длину 25, или поле comments, являющееся опциональным.

Это лишь некоторые типы полей, которые Django предоставляет для форм.
Список всех имеющихся типов полей мы рассмотрели с вами в разделе 4.1 "Работа с формами".


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

Я не знаю осознанно ли делаются повторение материала, который уже был ранее, или это издержки дополнения курса, но мне такой подход очень нравится, запоминается и осознается в разы лучше, а то формы прошел, вроде все понял, но на текущем этапе уже все подзабылось без должной практики (хотя и прошло то всего пару дней) :)

@Нарбеков_Марсель, это побочка после обновления материала 2, 3 и 4 модуля, полностью их переработали 4ре месяца назад и добавили дополнительный материал. Совпадения решили не удалять, пусть будет для повторения, а кто запомнил сразу - можно пропустить.

@Дмитрий_Селезнев, очень хорошо, потому что память у меня не очень хорошая, хотя я себе стараюсь все конспектировать, но объем очень большой) 

@Нарбеков_Марсель, довольно быстро запомнится, а что не запомнится, то всегда можно посмотреть в документации и исходном коде Django: https://docs.djangoproject.com/en/5.0/ и https://github.com/django/django/tree/stable/5.0.x/django.

2.6 "Работа с формами". Не работает, видать старый материал был 

@Дима_Строганцев, спасибо, исправили.

@Илья_Перминов, Сейчас эта страница выдает ошибку 403. 

Это приватный урок. Требуется специальный доступ (например, ссылка-приглашение).

@Корнев_Степан, Это все потому, что кто-то был не внимателен и исправил только 1 ссылку в лекции) Сейчас исправил обе, спасибо.