跳转到主要内容

表单设计器

项目描述

https://github.com/feincms/form-designer/actions/workflows/tests.yml/badge.svg

这个表单设计器并不试图提供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},
]

访问这些网站以获取更多信息

项目详情


下载文件

下载适合您平台的文件。如果您不确定该选择哪个,请了解有关安装包的更多信息。

源代码分发

form_designer-0.26.2.tar.gz (17.9 kB 查看哈希值)

上传时间 源代码

构建分发

form_designer-0.26.2-py3-none-any.whl (27.4 kB 查看哈希值)

上传时间 Python 3

支持