跳转到主要内容

在Volto中添加自定义表单的支持

项目描述

Latest Version Egg Status Supported - Python Versions License Coverage

collective.volto.formsupport

为Volto网站添加一些辅助路由和功能,这些功能由volto-form-block插件提供的表单块提供。

volto-form-block版本

与volto-form-block >= v3.8.0兼容

plone.restapi端点

@submit-form

前端应作为提交动作调用的端点。

您可以通过以下方式在存储块表单的上下文中使用POST调用它

> curl -i -X POST https://127.0.0.1:8080/Plone/my-form/@submit-form -H 'Accept: application/json' -H 'Content-Type: application/json' --data-raw '{"block_id": "123456789", "data": [{"field_id": "foo", "value":"foo", "label": "Foo"},{"field_id": "from", "value": "support@foo.com"}, {"field_id":"name", "value": "John Doe", "label": "Name"}]}'

其中

  • my-form是我们具有表单块的上下文

  • block_id是块的ID

  • data包含提交的表单数据

调用此端点后,它将执行一些操作(基于块设置)并返回包含提交数据的200响应。

@form-data

这是一个扩展组件。

有一个规则,如果用户可以编辑上下文(具有“修改门户内容”权限)并且有一个可以存储数据的块,则将返回一个form-data项到“组件”槽中。

使用“expand=true”调用,此端点返回存储的数据

> curl -i -X GET https://127.0.0.1:8080/Plone/my-form/@form-data -H 'Accept: application/json' -H 'Content-Type: application/json' --user admin:admin

指定一个block_id参数将只返回与页面上特定块关联的记录。

> curl -i -X GET https://127.0.0.1:8080/Plone/my-form/@form-data?block_id=123456789 -H ‘Accept: application/json’ -H ‘Content-Type: application/json’ –user admin:admin

并回复类似的内容

{
    "@id": "https://127.0.0.1:8080/Plone/my-form/@form-data?block_id=123456789",
    "items": [
        {
        "block_id": "123456789",
        "date": "2021-03-10T12:25:24",
        "from": "support@foo.com",
        "id": 912078826,
        "name": "John Doe"
        },
        ...
    ],
    "items_total": 42,
    "expired_total": 2
}

@form-data-export

返回包含所有数据的csv文件(仅限具有“修改门户内容”权限的用户)

> curl -i -X GET https://127.0.0.1:8080/Plone/my-form/@form-data-export -H 'Accept: application/json' -H 'Content-Type: application/json' --user admin:admin

如果表单字段在几次提交之间发生变化,您还将看到与旧字段相关的列。

@form-data-clear

重置存储(仅限具有“修改门户内容”权限的用户)

> curl -i -X DELETE https://127.0.0.1:8080/Plone/my-form/@form-data-clear --data-raw '{block_id: bbb}' -H 'Accept: application/json' -H 'Content-Type: application/json' --user admin:admin

可以在有效负载中传递可选参数

  • block_id仅删除与页面上特定块相关的数据,否则将删除页面上所有表单块的数据

  • expired一个布尔值,如果为true,则仅删除块配置中指定的天数之前的记录(需要上述block_id参数)

表单操作

使用volto-form-block,您可以设置表单提交是否应将数据发送到电子邮件地址或存储到内部目录中(或两者都存储)。

发送

如果块设置为发送数据,则将包含表单数据的电子邮件发送到块设置中指定的收件人,或者(如果未设置)发送到网站地址。

如果POST数据中有一个attachments字段,则这些文件将被附加到发送的电子邮件中。

XML附件

可以通过配置volto块的attachXml选项,可选地将数据的XML副本附加到发送的电子邮件中。

发送的XML遵循[collective.easyform](https://github.com/collective/collective.easyform)中的相同格式。以下是一个示例

`xml <?xml version='1.0' encoding='utf-8'?><form><field name="Custom field label">My value</field></form> `

在XML中使用的字段名称将利用数据ID映射功能(如果使用)。在文档的以下存储部分中了解更多关于此功能的信息。

确认邮件

还可以向填写表单的用户发送电子邮件。

将“发送到”值设置为包含< cite>确认以启用此行为。然后可以使用附加的块字段< cite>acknowledgementMessage来写入发送给用户的消息,并使用< cite>acknowledgementFields块字段来选择将包含发送确认邮件的电子邮件地址的字段。

存储

如果块设置为存储数据,我们将将其存储到包含该块的(souper.plone目录)内容中。

存储是一个为< em>IFormDataStore接口注册的适配器,因此您可以轻松地覆盖它。

仅存储块设置中也存在的字段。缺失的字段将被跳过。

每个记录还存储两个< em>服务属性

  • < strong>fields_labels:字段ID到字段标签的映射。这在导出CSV文件时很有用,因此我们可以为列提供标签。

  • < strong>fields_order:字段ID的排序列表。这可以在CSV导出中用于保持字段的顺序。

我们存储这些属性,因为表单可能会随时间变化,我们希望记录中有一个字段的快照。

数据ID映射

导出的CSV文件可能需要由进一步处理使用,该处理需要CSV列的特定值。在这种情况下,可以使用< cite>Data ID Mapping功能将列名更改为每个字段的自定义文本。

块序列化器

有一个针对类型< span class="docutils literal">form的定制块序列化器。

如果用户无法编辑当前上下文,则此序列化器会删除所有以“**default_**"开头的字段。

这很有用,因为我们不希望将一些内部配置(例如收件人电子邮件地址)暴露给应该只填写表格的外部用户。

如果块有一个< span class="docutils literal">captcha字段,则由名为< span class="docutils literal">ICaptchaSupport的命名适配器提供的< span class="docutils literal">serialize方法序列化一个额外的属性< span class="docutils literal">captcha_props,结果包含对客户端有用的元数据,例如captcha公共密钥,即

{
    "subblocks": [
        ...
    ],
    "captcha": "recaptcha",
    "captcha_props": {
        "provider": "recaptcha",
        "public_key": "aaaaaaaaaaaaa"
    }
}

Captcha支持

Captcha支持需要一个实现< span class="docutils literal">ICaptchaSupport的特定名称适配器。此产品包含以下实现:

  • HCaptcha(plone.formwidget.hcaptcha)

  • Google ReCaptcha(plone.formwidget.recaptcha)

  • 自定义问题和答案(collective.z3cform.norobots)

  • Honeypot(collective.honeypot)

每个实现都必须分别包含、安装和配置。

要包含一个实现,您需要使用需要的extras_require安装egg

  • collective.volto.formsupport[recaptcha]

  • collective.volto.formsupport[hcaptcha]

  • collective.volto.formsupport[norobots]

  • collective.volto.formsupport[honeypot]

在表单提交期间,将通过定义的captcha方法验证token captcha。

对于captcha支持< cite>volto-form-block版本 >= 2.4.0是必需的。

Honeypot配置

如果Honeypot依赖项在buildout中可用,则启用 honeypot 验证并在表单中选择。

默认字段名称为< cite>protected_1,您可以使用环境变量进行更改。有关详细信息,请参阅collective.honeypot

附件上传限制

表单可以有一个或多个附件字段,以允许用户上传一些文件。

这些文件将通过邮件发送,因此设置一个限制可能是个好主意。例如,如果您使用Gmail作为邮件服务器,则无法发送带有附件的邮件 > 25MB。

您可以使用环境变量设置此限制(以MB为单位)

[instance]
environment-vars =
    FORM_ATTACHMENTS_LIMIT 25

默认情况下,此设置未设置。

上传限制也通过在表单数据中包含< cite>attachments_limit键传递给前端。

内容传输编码

可以设置邮件主体的内容传输编码,设置环境变量< cite>MAIL_CONTENT_TRANSFER_ENCODING

[instance]
environment-vars =
    MAIL_CONTENT_TRANSFER_ENCODING base64

这对于一些存在quoted-printable编码问题的SMTP服务器非常有用。

默认情况下,内容传输编码为quoted-printable,如https://github.com/zopefoundation/Products.MailHost/blob/master/src/Products/MailHost/MailHost.py#L65中覆盖。

电子邮件主题模板

您还可以使用字段id将表单值插值到电子邮件主题中,例如:${123321123}

标题转发

您可以通过配置volto块中的httpHeaders字段,将表单POST请求中的某些标题配置为包含在电子邮件标题中。

[volto-formblock](https://github.com/collective/volto-form-block)允许转发以下标题

  • HTTP_X_FORWARDED_FOR

  • HTTP_X_FORWARDED_PORT

  • REMOTE_ADDR

  • PATH_INFO

  • HTTP_USER_AGENT

  • HTTP_REFERER

数据保留

存在一个脚本用于实现数据清理(即GDPR目的)

bin/instance -OPlone run bin/formsupport_data_cleansing  --help
Usage: interpreter [OPTIONS]

bin/instance -OPlone run bin/formsupport_data_cleansing [--dryrun|--no-dryrun]

Options:
--dryrun        --dryrun (default) simulate, --no-dryrun actually save the
                changes

--help          Show this message and exit.

表单块有一个整数字段remove_data_after_days,保留天数可以在单个块中定义。如果值为0或更低,则对该特定表单没有数据清理。

示例

此附加功能可以在以下网站中看到

翻译

此产品已被翻译成

  • 意大利语

安装

通过将其添加到您的buildout中安装collective.volto.formsupport

[buildout]

...

eggs =
    collective.volto.formsupport

然后运行bin/buildout

贡献

许可

该项目遵循GPLv2许可证。

作者

此产品由RedTurtle Technology团队开发。

RedTurtle Technology Site

贡献者

变更日志

3.1.4 (2024-09-27)

  • 添加缺少的collective.volto.otp包含以设置pip环境[folix-01]

  • 可切换的电子邮件BCC字段OTP验证。[folix-01]

  • 允许作为日期输入的ISO格式字符串[JeffersonBledsoe]

3.1.3 (2024-09-11)

  • 独立于send标志将标记为use_as_bcc的电子邮件发送[folix-01]

  • 更新意大利语翻译。[cekk]

3.1.2 (2024-08-08)

  • 修复从版本升级的步骤。[folix-01]

3.1.1 (2024-08-08)

  • 修复邮件标题和页脚链接。[folix-01]

  • 在升级步骤中添加Plone5兼容性[folix-01]

  • 通过升级步骤安装otp包[folix-01]

  • 维护电子邮件消息中的字段顺序。[folix-01]

  • 移除otp逻辑(移动到collective.volto.otp)[folix-01]

3.1.0 (2024-07-04)

  • 配置电子邮件消息的标题和页脚。[folix-01]

  • 主题模板

  • 处理blocks属性未设置的情况。[mamico]

  • 使用plone/meta进行配置。[mamico]

3.0.2 (2024-05-05)

  • 清理用户提交的数据中的所有可能的HTML并将其转换为纯文本。[cekk]

3.0.1 (2024-04-18)

  • 修复README。[cekk]

3.0.0 (2024-04-18)

  • 添加通过OTP检查用户插入的电子邮件的功能。[folix-01]

  • 重大更改:清除数据方法从GET更改为DELETE[mamico]

  • 修复:在同一页面上有多个块时,所有数据都会被删除。现在,如果传递一个参数block_id,则仅删除与该块相关的记录。[mamico]

  • 特性:清除数据restapi接受一个参数以删除过期的记录[mamico]

  • 数据清理脚本[mamico]

  • 允许将表单数据的XML版本附加到发送的电子邮件中#22[JeffersonBledsoe]

  • 允许自定义字段的ID以用于CSV下载和XML附件#22[JeffersonBledsoe]

  • 添加西班牙语翻译。[macagua]

  • 添加德语翻译。[mbarde]

  • 允许在发送的电子邮件中转发请求头 #27 [JeffersonBledsoe]

  • 添加将电子邮件作为表格发送的支持 #31 [JeffersonBledsoe]

  • 为电子邮件字段添加验证。 [cekk]

  • 更好地使用纯文本和HTML文本编写电子邮件消息。 [cekk]

  • 对表单中传递的所有字符串值应用安全_html转换以防止XSS。 [cekk]

  • 丢弃表单模式中未定义的字段。 [cekk]

  • 在表单提交时,使用(最终清理过的)提交数据回复200状态码以确认消息。 [cekk]

  • 修复send_mail_template中的标签。 [cekk]

  • 在send_message字段中也防止XSS。 [cekk]

2.7.0 (2023-04-03)

  • 使用< cite>MAIL_CONTENT_TRANSFER_ENCODING环境变量覆盖content-transfer-encoding。 [mamico]

  • 表单块现在可以存储在Volto块容器中(列、手风琴、标签页等)。 [tiberiuichim]

2.6.2 (2022-11-07)

  • 修复collective.honeypot版本。 [cekk]

2.6.1 (2022-11-07)

  • 修复依赖关系。 [cekk]

2.6.0 (2022-11-07)

  • 添加collective.honeypot支持。 [cekk]

2.5.0 (2022-10-04)

  • 添加附件限制验证。可以通过环境变量进行配置。 [cekk]

  • 在csv中同时导出编译日期。 [cekk]

2.4.0 (2022-09-08)

  • 添加collective.z3cform.norobots支持 [erral]

2.3.0 (2022-05-26)

  • 重大更改:更改存储数据键的方式。现在我们使用field_id作为记录的键。 [cekk]

  • 修复csv导出中的引号。 [cekk]

  • 使用适当的字段标签生成csv列,并保持表单顺序。 [cekk]

  • Captcha支持 #13。 [mamico]

2.2.0 (2022-04-07)

  • 在提交时通知事件。 [mamico]

2.1.0 (2022-03-25)

  • 在volto-form-block中支持user_as_bcc字段:为带有该标志的每个电子邮件字段发送单独的邮件。 [cekk]

2.0.3 (2021-10-25)

  • 修复序列化器中的权限检查。 [nzambello]

2.0.2 (2021-10-25)

  • 修复权限检查。 [cekk]

2.0.1 (2021-10-18)

  • [修复]不要多次发送附件。 [cekk]

2.0.0 (2021-08-19)

1.0.5 (2021-05-12)

  • 添加巴西葡萄牙语(pt_BR)翻译。 [ericof]

1.0.4 (2021-04-15)

  • 更改setup.py中的分类器。这应该会解决一些安装问题。 [arsenico13]

1.0.3 (2021-04-08)

  • 新增:@submit-form入口点现在考虑字段是否“标记”为“use_as_reply_to”,并使用该字段作为“from”和“reply to”。 [arsenico13]

1.0.2 (2021-03-24)

  • 修复匿名用户的form_data。 [cekk]

1.0.1 (2021-03-24)

  • 修复pypi的README。 [cekk]

1.0.0 (2021-03-24)

  • 初始版本。 [cekk]

项目详情


下载文件

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

源代码分发

collective.volto.formsupport-3.1.4.tar.gz (133.7 kB 查看哈希值)

上传时间 源代码

构建分发

collective.volto.formsupport-3.1.4-py3-none-any.whl (153.5 kB 查看哈希值)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面