表单设计器
项目描述
这个表单设计器并不试图提供Django表单的所有配置可能性,而是通过管理界面而不是直接在Python代码中实现。相反,它努力成为一个每个人都可以立即使用的工具,无需长篇大论。
它提供了一组预定义的输入字段,如
文本字段(一行和多行小部件可选)
电子邮件地址字段
复选框
下拉菜单
单选按钮
多选复选框
隐藏输入字段
每个字段都可以可选地声明为必填项,还提供默认值和帮助文本。就这样。
默认操作(可以单独启用)包括将表单数据发送到可自由定义的电子邮件地址列表,以及将数据存储在数据库中以供以后导出。还提供了保存提交的 XLSX 导出功能。您还可以添加自己的操作。
旁白:如果您需要更多选项,您可能还想查看feincms3-forms。
安装表单设计器
使用pip安装包
$ pip install form-designer
设置表单设计器
将"form_designer"和"admin_ordering"添加到INSTALLED_APPS。
运行./manage.py migrate form_designer
进入Django的管理面板,添加一个或多个带有所需字段的表单。同时,在配置选项选择框中至少选择一个操作,通常您会选择“电子邮件”和“保存表单提交”选项,并填写一个或多个电子邮件地址。
如果您在使用表单设计器时与FeinCMS一起使用,内容类型可以从中导入form_designer.contents.FormContent。否则,您的代码应使用以下方法(代码可能位于视图中)
# Somehow fetch the form_designer.models.Form instance:
instance = get_object_or_404()
# Build the form class:
form_class = instance.form_class()
# Standard form processing:
if request.method == "POST":
form = form_class(request.POST)
if form.is_valid():
# Do what you want, or run the configured processors:
result = instance.process(form, request)
# Maybe there's something useful in here:
pprint(result)
return HttpResponseRedirect("thanks/")
else:
form = form_class()
return render(request, "form.html", {"form": form})
添加自定义操作
可以通过将其附加到Form.CONFIG_OPTIONS来添加自定义操作
from form_designer.models import Form
def do_thing(model_instance, form_instance, request, config, **kwargs):
pass
def do_validate(form_instance, data):
pass
Form.CONFIG_OPTIONS.append(
(
"do_thing",
{
"title": _("Do a thing"),
"form_fields": lambda form: [
("optional_form_field", forms.CharField(
label=_("Optional form field"),
required=False,
# validators...
# help_text...
)),
],
"process": do_thing,
"validate": do_validate,
},
)
)
有趣的部分是do_thing可调用函数。它目前接收四个参数,但是您还应该接受**kwargs以支持未来添加的附加参数
model_instance:表单模型实例
form_instance:动态生成的表单实例
request:当前的HTTP请求
config:配置选项(通过form_fields定义的键和值;例如,电子邮件操作定义了一个电子邮件字符字段,并使用config["email"]访问其值)。
ReCaptcha
要启用ReCaptcha,请安装django-recaptcha并将django_recaptcha添加到您的INSTALLED_APPS。这将自动在表单设计器中添加ReCaptcha字段。有关其他内容,请参阅django-recaptcha的readme。
覆盖字段类型
在您的设置文件中定义FORM_DESIGNER_FIELD_TYPES,如下所示
FORM_DESIGNER_FIELD_TYPES = "your_project.form_designer_config.FIELD_TYPES"
在your_project.form_designer_config.py中,如下所示
from django import forms
from django.utils.translation import gettext_lazy as _
FIELD_TYPES = [
{"type": "text", "verbose_name": _("text"), "field": forms.CharField},
{"type": "email", "verbose_name": _("email address"), "field": forms.EmailField},
]
访问这些网站以获取更多信息
项目详情
下载文件
下载适合您平台的文件。如果您不确定该选择哪个,请了解有关安装包的更多信息。