跳转到主要内容

A Django可重用应用程序,允许管理员用户在管理界面中创建自己的表单和报告

项目描述

Continuation of the unmaintained project "Django Forms builder"

django-forms-builder (cod)

Stephen McDonald创建

A Django可重用应用程序,允许管理员用户在管理界面中创建自己的表单,并从各种字段小部件(如普通文本字段、下拉列表和文件上传)中进行选择。还提供了控制谁在提交表单时收到电子邮件通知的选项。所有表单条目都可通过带有CSV/XLS导出的可筛选报告在管理界面中提供。

表单构建器

https://raw.githubusercontent.com/CZ-NIC/django-forms-builder/master/docs/img/fields.png

数据报告

https://raw.githubusercontent.com/CZ-NIC/django-forms-builder/master/docs/img/report.png

HTML5功能

以下HTML5表单功能受支持。

  • placeholder 属性

  • required 属性

  • email 字段

  • date 字段

  • datetime 字段

  • number 字段

  • url 字段

安装

安装django-forms-builder最简单的方法是直接使用pip从PyPi运行以下命令

$ pip install -U django-forms-builder

否则,您可以下载django-forms-builder并直接从源代码安装它

$ python setup.py install

安装完成后,您可以按照以下步骤配置项目以使用django-forms-builder。

forms_builder.forms 添加到项目的 settings 模块中的 INSTALLED_APPS

INSTALLED_APPS = (
    # other apps
    'forms_builder.forms',
)

如果您还没有这样做,请确保在项目的 settings 模块中的 TEMPLATE_CONTEXT_PROCESSORS 设置中包含了 django.core.context_processors.request

TEMPLATE_CONTEXT_PROCESSORS = (
    # other context processors
    "django.core.context_processors.request",
)

然后,将 forms_builder.forms.urls 添加到项目的 urls 模块中

from django.conf.urls.defaults import patterns, include, url
import forms_builder.forms.urls # add this import

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # other urlpatterns
    url(r'^admin/', include(admin.site.urls)),
    url(r'^forms/', include(forms_builder.forms.urls)),
)

最后,同步数据库

$ python manage.py syncdb

从版本 0.5 开始,django-forms-builder 提供了 South 迁移。如果您在项目中使用 South,您还需要运行迁移

$ python manage.py migrate forms

用法

安装并为您项目配置后,只需访问您项目的管理页面,您将看到一个新的表单部分。在这里,您可以创建和编辑表单。然后每个表单都有自己可查看的 URL。还提供了一个模板标签 render_built_form,可以在主要表单视图之外显示表单。当给定以下格式之一作为参数时,它会显示一个表单,其中 form_instanceForm 模型的实例

{% load forms_builder_tags %}

{% render_built_form form_instance %}
{% render_built_form form=form_instance %}
{% render_built_form id=form_instance.id %}
{% render_built_form slug=form_instance.slug %}

这允许使用表单的 slug 或 ID 显示表单,这些可以硬编码在模板中,或者存储在另一个模型实例中,而无需有表单实例。

文件上传

管理员用户可以创建允许文件上传的表单,这些文件可以通过 CSV 导出中提供的每个文件的下载 URL 访问。默认情况下,这些上传的文件存储在项目 MEDIA_ROOT 目录下的隐藏位置,但理想情况下应存储在公众无法访问的位置。要设置文件存储的位置,使其位于项目 MEDIA_ROOT 目录之外,您只需在项目的 settings 模块中定义 FORMS_BUILDER_UPLOAD_ROOT 设置。其值应该是网络服务器上不可公开访问的绝对路径。

配置

以下设置可以在项目的 settings 模块中定义。

  • FORMS_BUILDER_FIELD_MAX_LENGTH - 字段值的最大允许长度。默认为 2000

  • FORMS_BUILDER_LABEL_MAX_LENGTH - 字段标签的最大允许长度。默认为 20

  • FORMS_BUILDER_EXTRA_FIELDS - 要添加到表单字段类型的自定义字段的序列。默认为 ()

  • FORMS_BUILDER_UPLOAD_ROOT - 文件将上传到的绝对路径。默认为 None

  • FORMS_BUILDER_USE_HTML5 - 控制是否使用 HTML5 表单字段的布尔值。默认为 True

  • FORMS_BUILDER_USE_SITES - 控制表单是否与 Django 的 Sites 框架关联的布尔值。默认为 "django.contrib.sites" in settings.INSTALLED_APPS

  • FORMS_BUILDER_EDITABLE_SLUGS - 控制在管理中是否可编辑表单 slug 的布尔值。默认为 False

  • FORMS_BUILDER_CHOICES_QUOTE - 用于以引号开头的选择的字符。默认为反引号字符:`

  • FORMS_BUILDER_CHOICES_UNQUOTE - 用于以引号结束的选择的字符。默认为反引号字符:`

  • FORMS_BUILDER_CSV_DELIMITER - 导出表单响应为 CSV 时用作字段分隔符的字符。默认为一个逗号:,

  • FORMS_BUILDER_EMAIL_FAIL_SILENTLY - 用于发送电子邮件时 Django 的 fail_silently 参数的布尔值。默认为 settings.DEBUG

自定义字段和小部件

您还可以将您自己的自定义字段或小部件添加到表单可用的字段选择中。只需在项目的 settings 模块中定义一个 FORMS_BUILDER_EXTRA_FIELDS 设置的序列,其中序列中的每个项目都是一个将可用的自定义字段。

序列中的每个字段都应该是一个包含ID、字段类的点分导入路径和字段名称的三项序列。ID仅是字段的数字常量,但不能是已使用的值,因此请选择一个高数值,如100或更高,以避免冲突。

FORMS_BUILDER_EXTRA_FIELDS = (
    (100, "django.forms.BooleanField", "My cool checkbox"),
    (101, "my_module.MyCustomField", "Another field"),
)

您还可以通过FORMS_BUILDER_EXTRA_WIDGETS设置定义现有或自定义表单字段的自定义小部件类。序列中的每个字段都应该是一个包含上述相同ID和组件类的两项序列。

FORMS_BUILDER_EXTRA_WIDGETS = (
    (100, "my_module.MyCoolWidget"),
    (101, "my_other_module.AnotherWidget"),
)

请注意,使用FORMS_BUILDER_EXTRA_WIDGETS设置定义您自己的字段类的自定义小部件是有些多余的,因为您可以直接在字段类的代码中定义小部件。

信号

提供了两个信号,用于钩入表单提交过程中的不同状态。

  • form_invalid(sender=request, form=form) - 当表单提交无效数据时发送。

  • form_valid(sender=request, form=form, entry=entry) - 当表单提交有效数据时发送。

对于每个信号,发送者参数是当前请求。两个信号都接收一个form参数,它是FormForForm实例,一个针对FormEntry模型的ModelFormform_valid信号还接收一个entry参数,即创建的FormEntry模型实例。

使用信号的某些示例包括监控用户如何通过表单引起验证错误,或在一个事件链中成功提交表单。假设我们想要在提交表单时将登录用户的用户名与每个表单关联起来,给定一个包含标签为“用户名”且其字段类型设置为“隐藏”的字段的表单。

from django.dispatch import receiver
from forms_builder.forms.signals import form_valid

@receiver(form_valid)
def set_username(sender=None, form=None, entry=None, **kwargs):
    request = sender
    if request.user.is_authenticated():
        field = entry.form.fields.get(label="Username")
        field_entry, _ = entry.fields.get_or_create(field_id=field.id)
        field_entry.value = request.user.username
        field_entry.save()

动态字段默认值

从版本0.6开始,您可以使用Django模板代码为默认字段值。例如,您可以输入{{ request.user.username }},如果用户已认证,字段将预先填充用户名。

XLS导出

默认情况下,django-forms-builder通过CSV文件提供表单条目的导出。您还可以通过安装xlwt包来启用通过XLS文件(Microsoft Excel)的导出。

$ pip install xlwt

COD - 开发延续

原始存储库的最后一次提交是在2018年9月18日。因此,在这里继续开发,直到原始作者恢复活动。

运行示例

项目包括一个示例。然而,它位于模块外部,不是安装包的一部分。从存储库中下载示例。您可以使用make命令运行它。

git clone https://github.com/CZ-NIC/django-forms-builder
make prepare-example
make run-example

项目详细信息


下载文件

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

源分布

django-forms-builder-cod-1.0.0.tar.gz (59.2 kB 查看哈希)

上传时间:

构建分布

django_forms_builder_cod-1.0.0-py3-none-any.whl (87.8 kB 查看哈希值)

上传时间: Python 3

由以下支持