Отправляйте электронные письма из приложения Django.

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

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

Предпосылки

  • Питон 3.5+
  • Джанго
  • SMTP

Настройка проекта Джанго

Создайте изолированную среду Python, т. е. виртуальную среду. Рекомендуется использовать виртуальную среду для хранения зависимостей каждого проекта отдельно от системных зависимостей. Например, в вашей системе могут быть установлены разные версии Python, но в каждом проекте используется своя версия Python.
Начните с создания структуры каталогов проекта.

mkdir django-forms

Используйте Python venv для создания виртуальной среды.

python3.8 -m venv env

Активировать виртуальную среду

source env/bin/activate

После активации виртуальной среды командная строка должна выглядеть так:

(env) earth@earth-Notebook-PC ~/Desktop/Django-member-form/member_forms $

Установите Django в вашей виртуальной среде

pip install django

Создайте новый проект Django.

django-admin.py startproject .

Создать приложение для участников

python3.8 manage.py startapp members

Добавьте участников приложения в список INSTALLED_APPS

База данных

Django поставляется с базой данных SQLite, которая идеально подходит для разработки. В нашем приложении мы хотим хранить данные, представленные участниками, в базе данных. Вы можете найти настройки базы данных нашего проекта в файле settings.py.

Вы по-прежнему можете настроить свой проект для использования следующих баз данных, поддерживаемых Django.

  • PostgreSQL
  • МарияДБ
  • MySQL
  • Оракул

Хотя для целей разработки SQLite вполне подойдет.

Модели

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

Запустить миграцию

Миграции Django влияют на изменения, внесенные в модели.

python3.8 manage.py makemigrations
Migrations for 'members':
  members/migrations/0001_initial.py
    - Create model Member

Запустите команду миграции.

python3.8 manage.py migrate

Формы

Общие классы в Django упрощают создание форм. Создайте файл forms.py в приложении участников и добавьте следующий код.

Здесь мы создаем класс MemberForm, который наследуется от класса ModelForm. Мы также определяем класс Meta, который определяет все поля формы, определенные в модели.

Взгляды

Представления используются для отображения содержимого HTML. Откройте views.py и создайте функцию, которая определяет форму и отображает ее как контекст.

Шаблоны

У нас до сих пор нет шаблона. Django будет автоматически искать шаблоны в каталоге шаблонов приложения участника. Создайте файл templates/members/member_form.html. Добавьте следующее содержимое в member_form.html.

<form action="" method="post">
   {% csrf_token %}
   {{ form }}
   <input type="submit" value="Submit">
</form>

Когда пользователь отправляет форму, мы должны сообщить ему, что отправка формы прошла успешно. Итак, давайте создадим страницу, на которую будет перенаправлен пользователь. В папке шаблонов создайте файл success.html и добавьте следующее содержимое.

<h2>Thanks for submitting</h2>

URL-адреса

Обновите основной файл urls.py, чтобы включить URL-адреса приложения участника.

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
path('admin/', admin.site.urls),
path('members/', include('members.urls'))
]

Затем создайте файл members/urls.py и добавьте следующий код.

from django.urls import path
from .views import submit_form
urlpatterns = [
path('contact/', submit_form, name='contact'),
]

Теперь запустите сервер и перейдите к http://127.0.0.1:8000/members/contact/, и вы должны увидеть форму, показанную ниже.

Давайте добавим немного CSS, чтобы сделать форму красивее.

Как вы можете видеть на скриншоте выше, наша форма работает, как и ожидалось. Проверка также работает, как и ожидалось.

Отправка электронной почты

Django предоставляет модуль smtplib, который мы будем использовать для отправки электронного письма после отправки формы. Чтобы использовать этот модуль, нам нужно настроить SMTP Google Gmail. Используемая вами учетная запись gmail должна обеспечивать менее безопасный доступ. Перейдите в раздел Безопасность › Менее безопасный доступ к приложению и включите его.

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

Другие конфигурации, необходимые Django:

  • EMAIL_BACKEND
  • EMAIL_HOST
  • EMAIL_HOST_USER
  • EMAIL_HOST_PASSWORD
  • EMAIL_PORT
  • EMAIL_USE_TLS

Откройте settings.py и добавьте конфигурации.

DEFAULT_FROM_EMAIL = '[email protected]'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = 'app-password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

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

Вот письмо, которое отправляется после отправки формы.

Заключение

Модуль протокола SMTP идеально подходит для разработки, но если вам нужен более надежный способ отправки электронной почты, рассмотрите возможность использования SendGrid, который предоставляет бесплатный план и является более надежным и быстрым.

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