Skip to main content

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

fluentcms-contactform-1.0.tar.gz (21.5 kB view details)

Uploaded Source

Built Distribution

fluentcms_contactform-1.0-py2.py3-none-any.whl (29.4 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file fluentcms-contactform-1.0.tar.gz.

File metadata

File hashes

Hashes for fluentcms-contactform-1.0.tar.gz
Algorithm Hash digest
SHA256 7ae206d2d80fb2cc90dc171a15eaeee2f7eb428946aa59efc9d069710bd77dc6
MD5 c394fccc90c9a519b03faf4a6081e141
BLAKE2b-256 b5867ed99adc4feefd4e314c07232ef764aa55f5577c03116bc1f3e8d07227d7

See more details on using hashes here.

File details

Details for the file fluentcms_contactform-1.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for fluentcms_contactform-1.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 082188debf0a691bceb6ea9bf4328b08ac1c84fab59ed86d9688f6629c4ab6fd
MD5 87afd6c30547159580830fcda0871ebe
BLAKE2b-256 faa1e3e6dd087729bf015773ac30f6fc655bf52cd4d334cf4845b4ab448391eb

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page