contact_form.forms: 45 total statements, 94.3% covered

Generated: Wed 2013-12-04 16:44 CET

Source file: /home/dkaufhold/projects/bitmazk-contact-form/src/contact_form/forms.py

Stats: 33 executed, 2 missed, 10 excluded, 43 ignored

  1. """Forms for bitmazk-contact-form application."""
  2. import os
  3. from django import forms
  4. from django.conf import settings
  5. from django.core.mail import send_mail
  6. from django.template import loader
  7. from django.utils.translation import ugettext_lazy as _
  8. from .models import ContactFormCategory
  9. def contact_form_category_choices():
  10. return [(cat.slug, cat.name) for cat in
  11. ContactFormCategory.objects.all()]
  12. class ContactBaseForm(forms.Form):
  13. """Base class for contact forms."""
  14. from_email = settings.DEFAULT_FROM_EMAIL
  15. recipients = [x[1] for x in settings.CONTACT_FORM_RECIPIENTS]
  16. subject_template = 'contact_form/contact_form_subject.txt'
  17. body_template = 'contact_form/contact_form.txt'
  18. submit_button_value = _('Submit')
  19. def save(self):
  20. context = {}
  21. for info in self.cleaned_data:
  22. context.update({info: self.cleaned_data.get(info)})
  23. subject = loader.render_to_string(self.subject_template, context)
  24. subject = ''.join(subject.splitlines())
  25. body = loader.render_to_string(self.body_template, context)
  26. send_mail(subject, body, self.from_email, self.recipients,
  27. fail_silently=False)
  28. # Empties the form
  29. self.data = {}
  30. class ContactForm(ContactBaseForm):
  31. """A typical contact form."""
  32. name = forms.CharField(
  33. label=_('Name'),
  34. max_length=255,
  35. required=False,
  36. )
  37. email = forms.EmailField(
  38. label=_('Email'),
  39. )
  40. message = forms.CharField(
  41. max_length=5000,
  42. widget=forms.Textarea(attrs=dict(maxlength=5000)),
  43. label=_('Message'),
  44. )
  45. def __init__(self, *args, **kwargs):
  46. super(ContactForm, self).__init__(*args, **kwargs)
  47. if getattr(settings, 'ENABLE_CAPTCHA', False):
  48. # Only import captcha app, if captchas are used
  49. from captcha.fields import CaptchaField
  50. self.fields['captcha'] = CaptchaField()
  51. if getattr(settings, 'CONTACT_FORM_DISPLAY_CATEGORIES', False):
  52. # Only import captcha app, if captchas are used
  53. self.fields['category'] = forms.ChoiceField(
  54. choices=contact_form_category_choices(),
  55. label=_('Category'),
  56. help_text=_('Please tell us the subject of your request.'),
  57. )
  58. class AntiSpamContactForm(ContactForm):
  59. """A modern contact form, which works without captchas."""
  60. url = forms.URLField(required=False)
  61. class Media:
  62. css = {
  63. 'all': (os.path.join(
  64. settings.STATIC_URL, 'contact_form/css/contact_form.css'), )
  65. }
  66. js = (
  67. os.path.join(
  68. settings.STATIC_URL, 'contact_form/js/contact_form.js', ),
  69. )
  70. def save(self):
  71. if not self.cleaned_data.get('url'):
  72. return super(AntiSpamContactForm, self).save()