一个联系人表单插件django fluent contents
fluentcms-contactform的Python项目详细描述
fluentcms联系人表单
用于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。 从REMOTE_ADDR元字段读取IP地址。 如果您的站点位于http代理(例如使用gunicorn或负载平衡器)之后, 这将使所有联系人表单提交看起来都是从负载平衡器IP发送的。
解决这个问题的最好和最安全的方法是在wsgi.py:
中使用WsgiUnproxy中间件fromdjango.core.wsgiimportget_wsgi_applicationfromdjango.confimportsettingsfromwsgiunproxyimportunproxyapplication=get_wsgi_application()application=unproxy(trusted_proxies=settings.TRUSTED_X_FORWARDED_FOR_IPS)(application)
在settings.py中,可以定义哪些主机可以通过X-Forwarded-For HTTP请求中的头。例如:
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 stylesCRISPY_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-很好地用空格分隔,删除country前缀。
- INTERNATIONAL-很好地分隔了空间
- E164-所有数字,适合数据传输。
- RFC3966-适合url显示的tel: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=30CAPTCHA_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=TrueNOCAPTCHA=True# Use the new nocapcha
有关详细信息,请参阅django-recaptcha的文档。
警告
不要同时安装django-simple-captcha和django-recaptcha因为它们都安装了 在同一位置的captcha包。
前端配置
如果需要,可以通过重新定义fluentcms_contactform/forms/*.html覆盖html代码。
模板文件名与FLUENTCMS_CONTACTFORM_STYLES中定义的表单样式对应。 未定义自定义模板时,将使用fluentcms_contactform/forms/default.html。
可以通过重新定义fluentcms_contactform/staff_email/*.txt来更新员工电子邮件, 它的工作原理与表单模板类似。
贡献
如果您喜欢这个模块,分叉它,或想改进它,请让我们知道! 也欢迎拉取请求。:-)