1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
|
.. _faq:
Frequently asked questions
==========================
The following notes answer some common questions, and may be useful to
you when installing, configuring or using django-contact-form.
What versions of Django and Python are supported?
-------------------------------------------------
As of django-contact-form |release|, Django 3.2 and 4.0 are
supported, on Python 3.7 (Django 3.2 only), 3.8, 3.9, and 3.10. Note
that Django 3.2's support for Python 3.10 was added in Django 3.2.9,
so you may experience issues with Python 3.10 and earlier Django 3.2
versions.
What license is django-contact-form under?
----------------------------------------------
django-contact-form is offered under a three-clause BSD-style
license; this is `an OSI-approved open-source license
<http://www.opensource.org/licenses/bsd-license.php>`_, and allows you
a large degree of freedom in modifying and redistributing the
code. For the full terms, see the file `LICENSE` which came with
your copy of django-contact-form; if you did not receive a copy of
this file, you can view it online at
<https://github.com/ubernostrum/django-contact-form/blob/master/LICENSE>.
Why aren't there any default templates I can use?
-------------------------------------------------
Usable default templates, for an application designed to be widely
reused, are essentially impossible to produce; variations in site
design, block structure, etc. cannot be reliably accounted for. As
such, django-contact-form provides bare-bones (i.e., containing no
HTML structure whatsoever) templates in its source distribution to
enable running tests, and otherwise just provides good documentation
of all required templates and the context made available to them.
Why am I getting a bunch of `BadHeaderError` exceptions?
----------------------------------------------------------
Most likely, you have an error in your
:class:`~django_contact_form.forms.ContactForm`
subclass. Specifically, one or more of
:attr:`~django_contact_form.forms.ContactForm.from_email`,
:attr:`~django_contact_form.forms.ContactForm.recipient_list` or
:meth:`~django_contact_form.forms.ContactForm.subject` are returning
values which contain newlines.
As a security precaution against `email header injection attacks
<https://en.wikipedia.org/wiki/Email_injection>`_ (which allow
spammers and other malicious users to manipulate email and potentially
cause automated systems to send mail to unintended recipients),
`Django's email-sending framework does not permit newlines in message
headers
<https://docs.djangoproject.com/en/stable/topics/email/#preventing-header-injection>`_.
:exc:`~django.core.mail.BadHeaderError` is the exception Django raises
when a newline is detected in a header. By default,
:meth:`~django_contact_form.forms.ContactForm.subject` will forcibly
condense the subject to a single line.
Note that this only applies to the headers of an email message; the
message body can (and usually does) contain newlines.
I found a bug or want to make an improvement!
---------------------------------------------
The canonical development repository for django-contact-form is
online at <https://github.com/ubernostrum/django-contact-form>. Issues
and pull requests can both be filed there.
If you'd like to contribute to django-contact-form, that's great!
Just please remember that pull requests should include tests and
documentation for any changes made, and that following `PEP 8
<https://www.python.org/dev/peps/pep-0008/>`_ is mandatory. Pull
requests without documentation won't be merged, and PEP 8 style
violations or test coverage below 100% are both configured to break
the build.
I'm getting errors about "akismet" when trying to run tests?
------------------------------------------------------------
The full test suite of django-contact-form exercises all of its
functionality, including the spam-filtering
:class:`~django_contact_forms.forms.AkismetContactForm`. That class
uses `the Wordpress Akismet spam-detection service
<https://akismet.com/>`_ to perform spam filtering, and so requires
the Python `akismet` module to communicate with the Akismet service,
and some additional configuration (in the form of a valid Akismet API
key and associated URL).
By default, the tests for
:class:`~django_contact_forms.forms.AkismetContactForm` will be
skipped unless the required configuration (in the form of either a
pair of Django settings, or a pair of environment variables) is
detected. However, if you have supplied Akismet configuration but do
*not* have the Python `akismet` module, you will see test errors from
attempts to import `akismet`. You can resolve this by running::
pip install akismet
or (if you do not intend to use
:class:`~django_contact_forms.forms.AkismetContactForm`) by no longer
configuring the Django settings/environment variables used by Akismet.
Additionally, if the
:class:`~django_contact_forms.forms.AkismetContactForm` tests are
skipped, the default code-coverage report will fail due to the
relevant code not being exercised during the test run.
|