You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.8 KiB
49 lines
1.8 KiB
import logging
|
|
|
|
from django.contrib import messages
|
|
from django.contrib.messages.views import SuccessMessageMixin
|
|
from django.http import HttpResponseRedirect, Http404
|
|
from django.utils.translation import ugettext_lazy as _
|
|
from django.views.generic import FormView
|
|
|
|
from .forms import ContactUsForm
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class ContactUsFormView(SuccessMessageMixin, FormView):
|
|
next = None
|
|
template_name = None
|
|
form_class = ContactUsForm
|
|
http_method_names = ('post',)
|
|
success_message = _('Запрос был успешно отправлен')
|
|
error_message = _('Произошла ошибка во время отправки. Проверьте заполненные поля или попробуйте позже')
|
|
|
|
def form_valid(self, form):
|
|
try:
|
|
form.save()
|
|
form.send_email(self.request)
|
|
except Exception as e:
|
|
self.form_invalid(form=form)
|
|
messages.add_message(self.request, messages.SUCCESS, self.success_message, extra_tags='contact_us_form_message')
|
|
return HttpResponseRedirect(self.next)
|
|
|
|
def form_invalid(self, form):
|
|
context = self.get_context_data()
|
|
if len(form.errors) > 0:
|
|
context['form_show_errors'] = True
|
|
messages.add_message(self.request, messages.ERROR, self.error_message, extra_tags='contact_us_form_message')
|
|
return HttpResponseRedirect(self.next)
|
|
|
|
def dispatch(self, request, *args, **kwargs):
|
|
if request.POST.get('next', None) is None:
|
|
raise Http404()
|
|
else:
|
|
self.next = request.POST.get('next')
|
|
return super().dispatch(request, *args, **kwargs)
|
|
|
|
def get_form_kwargs(self):
|
|
kwargs = super().get_form_kwargs()
|
|
kwargs['next'] = self.next
|
|
kwargs['field_css_class_base'] = 'left-menu'
|
|
return kwargs
|
|
|