A contact form plugin django-fluent-contents
Project description
fluentcms-contactform
A plugin for django-fluent-contents to show a simple contact form.
Features:
Configurable fields.
Configurable layouts.
Phone number validation.
IP-Address detection.
Admin panel with submitted messages.
Email notification to staff members for new messages.
Optional capcha / reCAPTCHA support.
Installation
First install the module, preferably in a virtual environment. It can be installed from PyPI:
pip install fluentcms-contactform
Backend Configuration
First make sure the project is configured for django-fluent-contents.
Then add the following settings:
INSTALLED_APPS += (
'fluentcms_contactform',
'crispy_forms', # for default template
)
The database tables can be created afterwards:
./manage.py migrate
Now, the ContactFormPlugin can be added to your PlaceholderField and PlaceholderEditorAdmin admin screens.
Make sure the following settings are configured:
DEFAULT_FROM_EMAIL = '"Your Name" <you@example.org>'
FLUENTCMS_CONTACTFORM_VIA = "Sitename" # Will send a From: "Username via Sitename" email.
IPWARE_META_PRECEDENCE_ORDER = (
'REMOTE_ADDR', # The HTTP header for IP address detection
)
To have bootstrap 3 layouts, add:
CRISPY_TEMPLATE_PACK = 'bootstrap3'
IP address detection
The visitor IP-address is stored with the submited data. The detection happens using django-ipware which uses a “it just works” approach. For security, make sure the correct HTTP header is checked for IP addresses.
For default sites (Apache + mod_wsgi / Nginx + uWSGI) add the following to your settings:
IPWARE_META_PRECEDENCE_ORDER = (
'REMOTE_ADDR',
)
When the WSGI proces runs as a separate HTTP server (for Gunicorn), or runs behind a load balancer (HAProxy or Nginx reverse proxy), configure the following:
IPWARE_META_PRECEDENCE_ORDER = (
'HTTP_X_FORWARDED_FOR',
)
If your site has it’s own IP resolver function, you can also configure it. The default is:
FLUENTCMS_CONTACTFORM_IP_RESOLVER = 'ipware.ip.get_real_ip'
Updating the form layout
The default form fields can be changed using:
FLUENTCMS_CONTACTFORM_DEFAULT_FIELDS = ('name', 'email', 'phone_number', 'subject', 'message')
# default CSS styles
CRISPY_TEMPLATE_PACK = 'bootstrap3'
FLUENTCMS_CONTACTFORM_FORM_CSS_CLASS = 'form-horizontal'
FLUENTCMS_CONTACTFORM_LABEL_CSS_CLASS = 'col-xs-3'
FLUENTCMS_CONTACTFORM_FIELD_CSS_CLASS = 'col-xs-9'
Adding form fields
The form layout is fully configurable, as you can select your own form classes. The default settings are:
FLUENTCMS_CONTACTFORM_STYLES = (
('default', {
'title': _("Default"),
'form_class': 'fluentcms_contactform.forms.default.DefaultContactForm',
'required_apps': (),
}),
('captcha', {
'title': _("Default with captcha"),
'form_class': 'fluentcms_contactform.forms.captcha.CaptchaContactForm',
'required_apps': ('captcha',),
}),
('recaptcha', {
'title': _("Default with reCAPTCHA"),
'form_class': 'fluentcms_contactform.forms.recaptcha.ReCaptchaContactForm',
'required_apps': ('captcha',),
}),
)
You can provide any form class, as long as it inherits from fluentcms_contactform.forms.AbstractContactForm. The current implementation expects the form to be a model form, so any submitted data is safely stored in the database too.
By providing a helper function, the form fields received default styling from django-crispy-forms. See the provided form code in fluentcms_contactform.forms for examples.
Displaying phone numbers
The phone number field uses django-phonenumber-field to validate the phone number. By default, it requires an international notation starting with +. The PhoneNumberField can support national phone numbers too, which is useful when most visitors come from a single country. Update the PHONENUMBER_DEFAULT_REGION setting to reflect this.
For example, to auto insert a +31 prefix for Dutch phone numbers, use:
PHONENUMBER_DEFAULT_REGION = 'NL' # Your country code, eg. .NL to
The phone numbers can be displayed in various formats, the most human readable is:
PHONENUMBER_DEFAULT_FORMAT = 'NATIONAL'
The supported formats are:
NATIONAL - nicely space separated, remove the country prefix.
INTERNATIONAL - nicely space separated
E164 - all numbers, suitable for data transmission.
RFC3966 - the tel: URL, suitable for URL display.
Displaying captcha’s
The fluentcms_contactform.forms.captcha provides an example to create a captcha form. This requires a properly installed django-simple-captcha form:
pip install django-simple-captcha
In settings.py:
INSTALLED_APPS += (
'captcha',
)
In urls.py:
urlpatterns = [
# ...
url(r'^api/captcha/', include('captcha.urls')),
]
Add the database tables:
python manage.py migrate
And optional settings to simplify the captcha:
CAPTCHA_NOISE_FUNCTIONS = ()
CAPTCHA_FONT_SIZE = 30
CAPTCHA_LETTER_ROTATION = (-10,10)
This can be made more complicated when needed:
CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.math_challenge'
CAPTCHA_NOISE_FUNCTIONS = (
'captcha.helpers.noise_arcs',
'captcha.helpers.noise_dots',
)
See the documentation of django-simple-captcha for more examples.
Using reCAPTCHA
In a similar way, you can use recapcha. Select the form option, and make sure everything is installed:
pip install django-recaptcha
In settings.py:
INSTALLED_APPS += (
'captcha',
)
RECAPTCHA_PUBLIC_KEY = '...'
RECAPTCHA_PRIVATE_KEY = '...'
RECAPTCHA_USE_SSL = True
NOCAPTCHA = True # Use the new nocapcha
See the documentation of django-recaptcha for more details.
Frontend Configuration
If needed, the HTML code can be overwritten by redefining fluentcms_contactform/forms/*.html.
The template filename corresponds with the form style defined in FLUENTCMS_CONTACTFORM_STYLES. When no custom template is defined, fluentcms_contactform/forms/default.html will be used.
The staff email message can be updated by redefining fluentcms_contactform/staff_email/*.txt, which works similar to the form templates.
Contributing
If you like this module, forked it, or would like to improve it, please let us know! Pull requests are welcome too. :-)
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for fluentcms-contactform-1.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7ae206d2d80fb2cc90dc171a15eaeee2f7eb428946aa59efc9d069710bd77dc6 |
|
MD5 | c394fccc90c9a519b03faf4a6081e141 |
|
BLAKE2b-256 | b5867ed99adc4feefd4e314c07232ef764aa55f5577c03116bc1f3e8d07227d7 |
Hashes for fluentcms_contactform-1.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 082188debf0a691bceb6ea9bf4328b08ac1c84fab59ed86d9688f6629c4ab6fd |
|
MD5 | 87afd6c30547159580830fcda0871ebe |
|
BLAKE2b-256 | faa1e3e6dd087729bf015773ac30f6fc655bf52cd4d334cf4845b4ab448391eb |