一个联系人表单插件django fluent contents

fluentcms-contactform的Python项目详细描述


https://img.shields.io/travis/edoburu/fluentcms-contactform/master.svg?branch=masterhttps://img.shields.io/pypi/v/fluentcms-contactform.svghttps://img.shields.io/pypi/l/fluentcms-contactform.svghttps://img.shields.io/codecov/c/github/edoburu/fluentcms-contactform/master.svg

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-captchadjango-recaptcha因为它们都安装了 在同一位置的captcha包。

前端配置

如果需要,可以通过重新定义fluentcms_contactform/forms/*.html覆盖html代码。

模板文件名与FLUENTCMS_CONTACTFORM_STYLES中定义的表单样式对应。 未定义自定义模板时,将使用fluentcms_contactform/forms/default.html

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

贡献

如果您喜欢这个模块,分叉它,或想改进它,请让我们知道! 也欢迎拉取请求。:-)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
安卓中通过TCP发送时java文件损坏   Java测试预期=异常失败,断言错误   java ssh4 LazyInitializationException   java是否可以在集合中添加重复项?   java是一个免费的开源数据库管理工具   java是否可以在导出的html中嵌入图像   编译器构造解释一些东西,并用Java运行生成的字节码?   java KeyPairGenerator未生成随机密钥   java使用正则表达式生成字符串而不是匹配字符串   java中的多线程线程间通信   具有复合密钥的java Hibernate合并问题   java不能在MainActivity类之外使用SharedReferences变量   正在获取切割/零件异常消息。使用java Spring ControllerAdvice   java tomcat漏洞讨论   javascript在Java中实现“system”命令   java如何在JUnit5*中加载*Spring测试上下文之前获取回调?   java bluej关于缺少返回语句   JavaSpringBoot@ModelAttribute包含使用字符串键的其他模型   从可选中抛出异常。ifPresent()Java 8