一个联系人表单插件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第三方库


热门话题
Java NIO选择器最多只能选择50个SelectionKeys?   java阻止ImageButton创建新活动   为什么Java方法“Arrays.copyOf”处理中的整数数组与处理对象数组时的行为不同   java将安卓 1.6日历字段提取到vcal   将字符串转换为双精度后的java问题   java使用Webflux,是否可以使用AOP获取用于日志记录的ServerHttpRequest   java与jTextArea的基本区别是什么。setText()和jTextArea。append()方法?   java程序执行时间|将值保存到文件或数据结构?   java如何将表示字符的整数转换为字符串?   Java LWJGL新的渲染问题windows   java GUI提供异常   java创建第二个对象使类的函数不再工作   如何在java中将000验证为3位数字?   java bigO算法的时间复杂度,可以在不重复的情况下找到最长的子串   在30像素内点击按钮后,java在两个图像之间转换   java eclipse maven nexus不可解父pom   当存在其他SecurityConstraint时,java TransportGuary机密将被忽略   重新连接后激发的java Red5客户端流断开事件   javafx聊天应用程序中连接客户端的java问题