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__) # Create your views here. 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