跳转到主要内容

django-fluent-contents的联系人表单插件

项目描述

fluentcms-contactform

https://github.com/django-fluent/fluentcms-contactform/actions/workflows/tests.yaml/badge.svg?branch=master https://img.shields.io/pypi/v/fluentcms-contactform.svg https://img.shields.io/pypi/l/fluentcms-contactform.svg https://img.shields.io/codecov/c/github/django-fluent/fluentcms-contactform/master.svg

一个用于显示简单联系人表单的django-fluent-contents插件。

功能

  • 可配置字段。

  • 可配置布局。

  • 电话号码验证。

  • IP地址检测。

  • 带有提交消息的行政面板。

  • 为新消息向工作人员发送电子邮件通知。

  • 可选的capcha / reCAPTCHA支持。

安装

首先安装模块,最好在虚拟环境中。它可以从PyPI安装

pip install fluentcms-contactform

后端配置

首先确保项目已配置为django-fluent-contents

然后添加以下设置

INSTALLED_APPS += (
    'fluentcms_contactform',
    'crispy_forms',    # for default template
)

之后可以创建数据库表

./manage.py migrate

现在,可以将ContactFormPlugin添加到您的PlaceholderFieldPlaceholderEditorAdmin行政屏幕中。

确保以下设置已配置

DEFAULT_FROM_EMAIL = '"Your Name" <you@example.org>'

FLUENTCMS_CONTACTFORM_VIA = "Sitename"    # Will send a From: "Username via Sitename" email.

为了使用bootstrap 3布局,请添加

CRISPY_TEMPLATE_PACK = 'bootstrap3'

IP地址检测

该包将访客的远程IP地址存储在模型中。IP地址是从REMOTE_ADDR元字段中读取的。如果你的网站位于HTTP代理后面(例如使用Gunicorn或负载均衡器),这会使所有联系表单提交看起来都是从负载均衡器IP地址发送的。

解决此问题的最佳和最安全的方法是,在你的wsgi.py中使用WsgiUnproxy中间件。

from django.core.wsgi import get_wsgi_application
from django.conf import settings
from wsgiunproxy import unproxy

application = get_wsgi_application()
application = unproxy(trusted_proxies=settings.TRUSTED_X_FORWARDED_FOR_IPS)(application)

在你的settings.py中,你可以定义哪些主机可以传递HTTP请求中的X-Forwarded-For头部。例如

TRUSTED_X_FORWARDED_FOR_IPS = (
    '11.22.33.44',
    '192.168.0.1',
)

更新表单布局

可以使用以下方式更改默认表单字段

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'

例如,可以删除主题

FLUENTCMS_CONTACTFORM_DEFAULT_FIELDS = ('name', 'email', 'phone_number', 'message')

添加表单字段

表单布局完全可配置,因为你可以选择自己的表单类。默认设置是

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',),
    }),
)

你可以提供任何表单类,只要它继承自fluentcms_contactform.forms.AbstractContactForm。当前实现期望表单是一个模型表单,因此任何提交的数据都将安全地存储在数据库中。

通过提供一个helper函数,表单字段将从django-crispy-forms获取默认样式。请参阅fluentcms_contactform.forms中提供的表单代码示例。

表单使用fluentcms_contactform/forms/*name*.html模板进行渲染。

显示电话号码

电话号码字段使用django-phonenumber-field来验证电话号码。默认情况下,它需要一个以+开始的国际格式。PhoneNumberField也可以支持国家电话号码,这对于大多数访客来自单一国家的情况很有用。更新PHONENUMBER_DEFAULT_REGION设置以反映这一点。

例如,为了自动插入荷兰电话号码的前缀+31,请使用

PHONENUMBER_DEFAULT_REGION = 'NL'   # Your country code, eg. .NL to

电话号码可以以各种格式显示,最易读的是

PHONENUMBER_DEFAULT_FORMAT = 'NATIONAL'

支持的格式是

  • NATIONAL - 优雅地空格分隔,移除国家前缀。

  • INTERNATIONAL - 优雅地空格分隔

  • E164 - 所有号码,适合数据传输。

  • RFC3966 - tel: URL,适合URL显示。

显示验证码

fluentcms_contactform.forms.captcha提供了一个创建验证码表单的示例。这需要一个正确安装的django-simple-captcha表单

pip install django-simple-captcha

settings.py

INSTALLED_APPS += (
    'captcha',
)

urls.py

urlpatterns = [
    # ...

    url(r'^api/captcha/', include('captcha.urls')),

]

添加数据库表

python manage.py migrate

以及简化验证码的可选设置

CAPTCHA_NOISE_FUNCTIONS = ()
CAPTCHA_FONT_SIZE = 30
CAPTCHA_LETTER_ROTATION = (-10,10)

如有需要,可以使其更复杂

CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.math_challenge'
CAPTCHA_NOISE_FUNCTIONS = (
    'captcha.helpers.noise_arcs',
    'captcha.helpers.noise_dots',
)

有关更多示例,请参阅django-simple-captcha的文档。

使用reCAPTCHA

以类似的方式,你可以使用recapcha。选择表单选项,并确保一切已安装

pip install django-recaptcha

settings.py

INSTALLED_APPS += (
    'captcha',
)

RECAPTCHA_PUBLIC_KEY = '...'
RECAPTCHA_PRIVATE_KEY = '...'
RECAPTCHA_USE_SSL = True
NOCAPTCHA = True  # Use the new nocapcha

有关更多详细信息,请参阅django-recaptcha的文档。

前端配置

如有必要,可以通过重新定义fluentcms_contactform/forms/*.html来覆盖HTML代码。

模板文件名与FLUENTCMS_CONTACTFORM_STYLES中定义的表单样式相对应。如果没有定义自定义模板,则将使用fluentcms_contactform/forms/default.html

员工电子邮件信息可以通过重新定义fluentcms_contactform/staff_email/*.txt进行更新,其工作原理与表单模板类似。

贡献

如果您喜欢这个模块,已经进行了分支或希望对其进行改进,请告诉我们!我们也欢迎拉取请求。:-)

项目详情


下载文件

下载适用于您平台文件的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

fluentcms-contactform-3.0.tar.gz (26.8 kB 查看哈希)

上传时间 源代码

构建分发

fluentcms_contactform-3.0-py3-none-any.whl (30.9 kB 查看哈希)

上传时间 Python 3

由以下支持