contact_form.forms: 38 total statements, 100.0% covered

Generated: Wed 2013-03-27 09:03 CET

Source file: /home/tobi/Projects/bitmazk-contact-form/src/contact_form/forms.py

Stats: 30 executed, 0 missed, 8 excluded, 34 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. class ContactBaseForm(forms.Form):
  9. """Base class for contact forms."""
  10. from_email = settings.DEFAULT_FROM_EMAIL
  11. recipients = [x[1] for x in settings.CONTACT_FORM_RECIPIENTS]
  12. subject_template = 'contact_form/contact_form_subject.txt'
  13. body_template = 'contact_form/contact_form.txt'
  14. submit_button_value = _('Submit')
  15. def save(self):
  16. context = {}
  17. for info in self.cleaned_data:
  18. context.update({info: self.cleaned_data.get(info)})
  19. subject = loader.render_to_string(self.subject_template, context)
  20. subject = ''.join(subject.splitlines())
  21. body = loader.render_to_string(self.body_template, context,)
  22. send_mail(subject, body, self.from_email, self.recipients,
  23. fail_silently=False)
  24. class ContactForm(ContactBaseForm):
  25. """A typical contact form."""
  26. name = forms.CharField(
  27. label=_('Name'),
  28. max_length=255,
  29. required=False,
  30. )
  31. email = forms.EmailField(
  32. label=_('Email'),
  33. )
  34. message = forms.CharField(
  35. max_length=5000,
  36. widget=forms.Textarea(attrs=dict(maxlength=5000)),
  37. label=_('Message'),
  38. )
  39. def __init__(self, *args, **kwargs):
  40. super(ContactForm, self).__init__(*args, **kwargs)
  41. if getattr(settings, 'ENABLE_CAPTCHA', False):
  42. # Only import captcha app, if captchas are used
  43. from captcha.fields import CaptchaField
  44. self.fields['captcha'] = CaptchaField()
  45. class AntiSpamContactForm(ContactForm):
  46. """A modern contact form, which works without captchas."""
  47. url = forms.URLField(required=False)
  48. class Media:
  49. css = {
  50. 'all': (os.path.join(
  51. settings.STATIC_URL, 'contact_form/css/contact_form.css'), )
  52. }
  53. js = (
  54. os.path.join(
  55. settings.STATIC_URL, 'contact_form/js/contact_form.js', ),
  56. )
  57. def save(self):
  58. if not self.cleaned_data.get('url'):
  59. return super(AntiSpamContactForm, self).save()