На сегодняшний день я научился создавать и обрабатывать форму обратной связи на сайте с использованием Django. Этот процесс включает несколько ключевых шагов: создание модели для данных формы, формы для пользовательского ввода, представления для обработки запросов и шаблон для отображения формы и сообщений об успешной отправке. Давайте подробнее рассмотрим каждый из этих шагов на примере кода.
1. Определение модели данных
Первым шагом я создал модель FormsHome
, которая определяет структуру данных для хранения информации, введенной пользователями через форму обратной связи.
from django.db import models
from django.utils import timezone
class FormsHome(models.Model):
SERVICE_CHOICES = [
('email', 'Email'),
('whatsapp', 'WhatsApp'),
('telegram', 'Telegram'),
]
nameFormsHome = models.CharField(max_length=200, verbose_name='Имя отправителя')
emailFormsHome = models.EmailField(verbose_name='Email отправителя')
callFormsHome = models.CharField(max_length=10, choices=SERVICE_CHOICES)
massageFormsHome = models.TextField(verbose_name='Сообщение')
time_create = models.DateTimeField(default=timezone.now, verbose_name='Дата публикации')
def __str__(self):
return self.nameFormsHome
class Meta:
verbose_name = 'Сообщение'
verbose_name_plural = 'Сообщения'
2. Создание формы Django
Для того чтобы пользователи могли вводить данные, я определил форму formsHome
, которая основана на модели FormsHome
.
from django import forms
from .models import FormsHome
class formsHome(forms.ModelForm):
class Meta:
model = FormsHome
fields = ['nameFormsHome', 'emailFormsHome', 'callFormsHome', 'massageFormsHome']
3. Представления (Views) Django
Для обработки данных, отправленных через форму, я создал представление FormsVievs
, которое сохраняет данные, если форма заполнена правильно, и перенаправляет пользователя на страницу благодарности.
from django.shortcuts import render, redirect
from .forms import formsHome
from .models import FormsHome
def FormsVievs(request):
if request.method == 'POST':
form = formsHome(request.POST)
if form.is_valid():
form.save()
return redirect('forms_home_thanks')
else:
form = formsHome()
return render(request, 'forms_home.html', {'form': form})
def contact_thanks_view(request):
return render(request, 'forms_thanks.html')
4. Шаблон HTML для формы
Наконец, я создал HTML-шаблон forms_home.html
, который отображает форму обратной связи и использует Django-шаблоны для подстановки данных и обработки формы.
<div class="tj-contact-form">
<form action="{% url 'forms_home' %}" method="POST">
{% csrf_token %}
<div class="row gx-3">
<div class="col-sm-6">
<div class="form_group">
<input type="text" name="nameFormsHome" id="nameFormsHome" value="{{ form.nameFormsHome.value|default_if_none:'' }}" placeholder="Имя"
autocomplete="off">
</div>
</div>
<div class="col-sm-6">
<div class="form_group">
<input type="email" name="emailFormsHome" id="emailFormsHome" value="{{ form.emailFormsHome.value|default_if_none:'' }}" placeholder="Email"
autocomplete="off">
</div>
</div>
<div class="col-12">
<div class="form_group">
<select name="callFormsHome" id="callFormsHome" class="tj-nice-select">
<option value="" selected disabled>Выберите удобный вид связи</option>
<option value="email" {% if form.callFormsHome.value == "email" %}selected{% endif %}>Email</option>
<option value="whatsapp" {% if form.callFormsHome.value == "whatsapp" %}selected{% endif %}>WhatsApp</option>
<option value="telegram" {% if form.callFormsHome.value == "telegram" %}selected{% endif %}>Telegram</option>
</select>
</div>
</div>
<div class="col-12">
<div class="form_group">
<textarea name="massageFormsHome" id="massageFormsHome" placeholder="Сообщение">{{ form.massageFormsHome.value|default_if_none:'' }}</textarea>
</div>
</div>
<div class="col-12">
<div class="form_btn">
<button type="submit" class="btn tj-btn-primary">Отправить</button>
</div>
</div>
</div>
</form>
</div>
Заключение
Таким образом, благодаря использованию Django, я смог настроить полнофункциональную форму обратной связи на моем сайте. Этот процесс включал создание модели данных, формы для пользовательского ввода, представления для обработки запросов и HTML-шаблона для отображения формы. Теперь пользователи могут легко отправлять мне сообщения через сайт, а я могу управлять этими сообщениями в административной панели Django.
Написать комментарий