django-fluent-contents的联系人表单插件
项目描述
fluentcms-contactform
一个用于显示简单联系人表单的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添加到您的PlaceholderField和PlaceholderEditorAdmin行政屏幕中。
确保以下设置已配置
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进行更新,其工作原理与表单模板类似。
贡献
如果您喜欢这个模块,已经进行了分支或希望对其进行改进,请告诉我们!我们也欢迎拉取请求。:-)
项目详情
下载文件
下载适用于您平台文件的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。