Django - Форма обратной связи
Создание формы обратной связи на Django.
В этой статье поделюсь с вами рецептом, как написать простую форму обратной связи.
Делал тоже по примеру, но вносил свои дополнения и изменения.
Форма будет состоять из полей:
subject - Тема
sender - e-mail
message - сообщение
copy - копия на свой адрес почты
И так приступим.
1. Создаем модель формы в файле forms.py вашего приложения в моем случае это blog.
# Модель формы обратной связи
class ContactForm(forms.Form):
subject = forms.CharField(max_length=100, widget=forms.TextInput(attrs={'size':'40','class': 'form-control'}))
sender = forms.EmailField(widget=forms.TextInput(attrs={'size':'40','class': 'form-control'}))
message = forms.CharField(widget=forms.Textarea(attrs={'class': 'form-control'}))
copy = forms.BooleanField(required=False)
2. В файле views.py пишем функцию обработчик
# Функция формы обратной связи
def contactform(reguest):
if reguest.method == 'POST':
form = ContactForm(reguest.POST)
# Если форма заполнена корректно, сохраняем все введённые пользователем значения
if form.is_valid():
subject = form.cleaned_data['subject']
sender = form.cleaned_data['sender']
message = form.cleaned_data['message']
copy = form.cleaned_data['copy']
recepients = ['myemail@gmail.com']
# Если пользователь захотел получить копию себе, добавляем его в список получателей
if copy:
recepients.append(sender)
try:
send_mail(subject, message, 'myemail@gmail.com', recepients)
except BadHeaderError: #Защита от уязвимости
return HttpResponse('Invalid header found')
# Переходим на другую страницу, если сообщение отправлено
return HttpResponseRedirect('/blog/thanks/')
else:
form = ContactForm()
# Выводим форму в шаблон
return render(reguest, 'contact.html', {'form': form, 'username': auth.get_user(reguest).username})
3. Здесь же в файле views.py пишем функцию к странице 'thanks' в случае успешной отправки будет выводится эта страница.
def thanks(reguest):
thanks = 'thanks'
return render(reguest, 'thanks.html', {'thanks': thanks})
4. В файле urls.py пишем маршрутизацию к страницам thanks и contact
url(r'^contact/$', views.contactform, name='contact'),
url(r'^thanks/$', views.thanks, name='thanks'),
5. Выводим форму в шаблон contact.html примерно так.
{% extends 'base.html' %}
{% load bootstrap3 %}
{% block title %} - Обратная связь{% endblock %}
{% block contactform %}
<div class="panel panel-success">
<div class="panel-heading">
<h2 class="panel-title">Обратная связь</h2>
</div>
<div class="panel-body">
<div class="well well-lg">
<h3></h3>
<form action="{% url 'blog:contact' %}" method="post">
{% csrf_token %}
{# {% bootstrap_form form %}#}
{{ form.non_field_errors }}
<div>
<label for="id_subject">Тема:</label>
{{ form.subject.errors }}
{# {{ form.subject }}#}
<input class="form-control" id="id_subject" name="subject" placeholder="Тема">
</div>
<div>
<label for="id_sender">E-mail:</label>
{{ form.sender.errors }}
{# {{ form.sender }}#}
<input class="form-control" id="id_sender" name="sender" placeholder="Ваш e-mail">
</div>
<div>
<label for="id_message">Сообщение:</label>
{{ form.message.errors }}
{# {{ form.message }}#}
<textarea class="form-control" id="id_message" name="message" placeholder="Введите ваше сообщение"></textarea>
</div>
<div>
{{ form.copy.errors }}
<label for="id_copy">{{ form.copy }} Отправить копию себе </label>
</div>
<br>
<input type="submit" class="btn btn-success" value="Отправить сообщение"/>
</form>
</div>
</div>
</div>
{% endblock %}
6. Выводим сообщение об успешной отправке в шаблон thanks.html примерно так.
{% extends 'base.html' %}
{% load bootstrap3 %}
{% block contactform %}
<div class="panel panel-success">
<div class="panel-heading">
<h2 class="panel-title"></h2>
</div>
<div class="panel-body">
<div class="well well-lg" align="center">
<h3>Спасибо, Ваше сообщение отправлено!</h3>
<div align="center"><a href="/"><button type="button" class="btn btn-info">Вернутся на главную</button></a></div>
</div>
</div>
</div>
{% endblock %}
7. В файл настроек settings.py добавляем эти настройки для работы почтового срвера. В моем случае я настроил отправку почты через сервер mail.ru, вы можете через любой другой настроить.
# Настройки почтового сервера
EMAIL_HOST = 'smtp.mail.ru'
EMAIL_HOST_USER = 'mymail@mail.ru'
EMAIL_HOST_PASSWORD = 'mypassword'
EMAIL_PORT = 465
EMAIL_USE_SSL = True
DEFAULT_FROM_EMAIL = 'mymail@mail.ru'
Впринципе все. Перезагружаем веб сервер и пробуем тестировать форму на отправку сообщений. Если все сделали правильно то сообщение должно придти на указанный адрес в настройках.
Ваши комментарии
Комментарии могут оставлять только зарегистрированые пользователи!