Source code for recontact.views

from django.shortcuts import render
from django.core.mail import EmailMessage
from django.views.generic.base import View, TemplateView
from django.http import HttpResponseRedirect
from django.urls import reverse
from .forms import RecontactForm

recontact_attrs = {
    'template_name': 'recontact/contact.html',
    'confirmation_template_name': 'recontact/message_sent.html',
    'addresses': ['postmaster@localhost'],
    'extra_context': {},
    'query': 'Recontact query:',
    'allow_click_bait': False,
    'site_key': '6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI'
}

try:
    from django.conf import settings
    recontact_attrs.update(settings.RECONTACT_CONFIG)
except:
    pass

[docs]class RecontactView(View): """ A class based view which sends a contact email message and then redirects to an acknowledgement page. """ template_name = recontact_attrs['template_name'] confirmation_template_name = recontact_attrs['confirmation_template_name'] addresses = recontact_attrs['addresses'] extra_context = recontact_attrs['extra_context'] query = recontact_attrs['query'] site_key = recontact_attrs['site_key'] def post(self, request, *args, **kwargs): form = RecontactForm(data=request.POST) context= self._get_extra_context(request, *args, **kwargs) if form.is_valid(): subject = request.POST.get('subject', 'spam') sender = request.POST.get('sender', 'unknown') reply_to = request.POST.get('reply_to', '<>') message = request.POST.get('message', '') body = 'Message received from %s:\n\n%s'%(sender, message) email = EmailMessage( subject='%s %s'%(self.query, subject), to=self._get_addresses(request, *args, **kwargs), body=body, headers = {'Reply-To': reply_to} ) email.send() return HttpResponseRedirect(request.META['HTTP_REFERER'] + 'sent/') context.update({'form': form, 'site_key': self.site_key}) return render(request, self.template_name, context) def get(self, request, *args, **kwargs): context = self._get_extra_context(request, *args, **kwargs) if kwargs.get('sent', None): return render(request, self.confirmation_template_name, context) else: context.update({'form': RecontactForm(), 'site_key': self.site_key}) return render(request, self.template_name, context) def _get_addresses(self, request, *args, **kwargs): if callable(self.addresses): return self.addresses(request, *args, **kwargs) else: return self.addresses def _get_extra_context(self, request, *args, **kwargs): if callable(self.extra_context): return self.extra_context(request, *args, **kwargs) else: return self.extra_context