对静态站点进行简单、无痛的表单处理。
django-fwdform的Python项目详细描述
对静态站点进行简单、无痛的表单处理。
为什么?
我在aws s3上有几个网站,每个月只花一分钱……我不想 每月支付20美元(每张表格)处理联系表格!
20+由1个heroku app提供支持的域=利润!
功能
- 多站点支持。
- 无限格式
- 无限制提交
- 通过Akismet保护垃圾邮件。
- 使用ajax提交表单。
- 用于管理表单的rest api。
快速启动
安装django-fwdform:
pip install django-fwdform
将fwdform添加到INSTALLED_APPS:
INSTALLED_APPS = ( ... 'corsheaders', 'fwdform', ... )
同步数据库:
python manage.py migrate
将fwdform.urls添加到项目的url模块:
urlpatterns = patterns( ... url(r'^', include('fwdform.urls', namespace='fwdform')), ... )
依赖关系
此包要求正确安装和配置django-cors-headers。使用pip安装django-fwdform时,会自动安装django-cors-headers。
您需要将corsheaders中间件类添加到MIDDLEWARE_CLASSES设置:
MIDDLEWARE_CLASSES = ( ... 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', ... )
注意CorsMiddleware需要在django的CommonMiddleware之前出现。
允许来自所有域的CORS请求:
CORS_ORIGIN_ALLOW_ALL = True
样本表格
<form action="//example.com/send/<form_hash>/" method="POST"> <input type="text" name="name" required="required"/> <input type="email" name="email" required="required" /> <textarea name="message" rows="5"></textarea> <input type="submit" value="Send"> </form>
特殊表单输入
u下一步
默认情况下,提交表单后,用户会看到fwdform“谢谢”页面。您可以为该页提供另一个url。
<input type="hidden" name="_next" value="//example.com/thanks.html" />
_主题
此值用于电子邮件的主题:
<input type="hidden" name="_subject" value="Contact Form" />
_明白了
添加此“蜜罐”字段。如果提供了一个值,提交将被忽略。输入应该用css隐藏:
<input type="text" name="_gotcha" style="display:none;" />
name/电子邮件/消息
通过Akismet进行SPAN预防-垃圾邮件检查器后端查找这些特别命名的表单输入:
<input type="text" name="name" placeholder="Your Name"> <input type="email" name="email" placeholder="Your Email"> <textarea name="message" rows="5"></textarea>
rest api
注册一个表单,这将为新创建的表单返回一个hashid:
$ curl --data "name=Contact%20Form&recipients=conttact@example.com" http://example.com/<site_token>/ {"hashid": "0rPGVlYZWqMRE8OebjoM1ogpmvNL23A9dxJzywQD"}
通过将已知的^ {TT11}$作为PARAM:
更新现有的窗体配置$ curl --data "recipients=hello@example.com&hashid=0rPGVlYZWqMRE8OebjoM1ogpmvNL23A9dxJzywQD" http://example.com/<site_token>/
ajax提交
您可以通过ajax使用fwdform。这甚至适用于跨起源。
如果您使用jquery,可以这样做:
$.ajax({ url: $form.attr("action"), method: "POST", data: $form.serialize(), dataType: "json", headers: {"X-Requested-With": "XMLHttpRequest"}, });