指南

如何搭建表单生成器

表单生成器让用户自行设计表单:选择字段、设置规则、发布链接,然后收集提交的内容。其底层包含三部分:以数据形式存储的表单定义、将定义转换为可用表单的渲染器,以及带有通知和导出功能的提交数据存储。在动手搭建之前,请先确认你是否真的需要它:如果你只需要一个联系表单或申请表,直接搭建该表单即可,无需构建生成器。

你真的需要生成器吗?

你的情况应该搭建
一两个很少变动的表单表单本身。参见如何添加联系表单。
由团队中的非开发人员创建的大量表单内部表单生成器
表单是你产品的一部分(由客户创建表单)带账户、限额和嵌入功能的表单生成器
你主要想要调查结果和图表调查应用

生成器是比单个表单大得多的项目,因为每种字段类型都必须在编辑器、公开表单、验证、存储、通知和导出中正常工作。

表单生成器需要什么

表单定义

将每个表单保存为字段列表,并以结构化数据存储(在Postgres的一列中保存JSON效果很好)。一个字段可能包含:

  • id:稳定的ID,即使标签改变也永不变化
  • type:文本、邮箱、数字、长文本、下拉选择、复选框、日期、文件
  • label(标签)和帮助文字
  • required(是否必填)、min / max(最小/最大值)、允许的文件类型
  • 下拉字段的选项
  • order(顺序),以及可选的条件(“仅当字段X为Y时显示”)

编辑器编辑这个列表,公开表单读取它。这就是整个核心思路:每个新表单都无需额外编写代码。

提交记录

  • 提交:表单、表单版本、提交时间、以字段ID为键的答案、状态(新建、已读、已归档)。
  • 文件:上传的文件应存放在文件存储中,提交记录中只保存引用,而不是把文件存在数据库行里。

页面

  • 表单列表,显示提交数量。
  • 编辑器:添加、排序和配置字段,旁边配有实时预览。
  • 设置:确认消息或跳转、通知邮件、开放/关闭日期、提交数量上限。
  • 公开表单,拥有独立链接,并提供可嵌入其他网站的版本。
  • 提交表格,支持搜索、状态筛选、详情查看和CSV导出。

决策与取舍

版本控制。 总会有人在收到200份提交后把“电话”改成“手机号码”。如果答案以字段ID存储,并且每条提交都记录了表单版本,旧提交仍能正确显示。否则你的数据会悄悄错位。

验证要做两次。 在浏览器中检查字段,以便快速反馈;同时在服务器端再次检查,因为任何人都可以直接向你的端点发送数据。真正起作用的是服务器端的检查。

文件上传。 它会带来存储成本、大小限制、文件类型检查,以及隐私问题(简历、证件、医疗表格)。应限制文件类型和大小,并默认将上传的文件设为私有,只有表单所有者可以读取。参见如何为应用添加文件上传。

通知。 “有人提交时给我发邮件”是用户的基本期望。这需要邮件服务商和API密钥,参见如何从应用发送邮件。

垃圾提交。 公开表单一定会被机器人发现。请使用蜜罐字段(对人隐藏、机器人会填写)、按IP限流、服务器端验证,必要时加上验证码服务。

嵌入方式。 iframe嵌入是把表单放到他人网站上最简单、最安全的方式。脚本嵌入看起来更原生,但更难搭建,也更难保证安全。

条件逻辑。 “仅当……时显示此字段”很受欢迎,但会成倍增加测试工作量。应在基础功能稳定之后再添加。

一个有效的首次提示词

为我的团队搭建一个表单生成器网页应用。登录用户在带实时预览的编辑器中创建表单。字段类型:短文本、长文本、邮箱、数字、日期、单选下拉、复选框和文件上传。每个字段都有稳定的ID、标签、帮助文字、必填标记,以及特定类型的规则(最小/最大值、选项、允许的文件类型,以及10 MB的大小限制)。将表单定义以JSON存储,并带有每次发布递增的版本号。每个表单都有一个公开链接和一段iframe嵌入代码。服务器端根据已发布版本验证提交内容,以字段ID为键保存答案并记录表单版本,上传的文件放入私有文件存储。添加一个隐藏的蜜罐字段和按IP的限流。表单所有者可以看到提交表格,包含状态(新建、已读、已归档)、详情视图和CSV导出。所有数据存储在数据库中。条件逻辑和邮件通知留待以后再做。

搭建步骤

  1. 编辑器和定义。 构建一个包含所有字段类型的表单,并让代理查看保存的JSON。它是否干净、稳定?
  2. 公开表单。 在手机上填写一遍,检查验证提示和确认页面。
  3. 服务器端验证。 让代理绕过页面,直接向服务器发送一条违反规则的提交。它应该被拒绝。
  4. 版本控制。 在收到几条提交后,重命名和重新排序字段。旧提交仍应显示正确的答案。
  5. 上传。 尝试一个过大的文件和一个类型错误的文件。确认陌生人无法通过猜测链接打开已上传的文件。
  6. 提交表格和导出。 检查答案中包含逗号、换行和带重音字符时,CSV导出是否正确。
  7. 通知、嵌入、逻辑。 一次添加一项。

常见错误

  • 按标签存储答案。 标签会变化。请使用稳定的字段ID。
  • 只做浏览器端验证。 它只是便利功能,不能起到保护作用。
  • 公开的上传文件。 表单经常收集人们不希望公开的文档。
  • 没有垃圾提交防护。 公开表单可能在几天内就充满垃圾信息。
  • 为一个表单搭建生成器。 直接做这个表单即可。
  • 公开产品中提交不设上限。 如果客户可以创建表单,请按套餐设置限额,否则一个热门表单就可能让你的托管费用激增。

何时现成产品更合适

托管表单工具非常出色,对大多数需求来说价格也不高。它们已经解决了嵌入、垃圾提交、支付、集成以及数十种字段类型的无障碍访问等问题。如果你的团队只需要表单,请直接使用其中一款,参见Typeform替代方案和Google表单替代方案。

当提交数据需要与你自己的数据放在一起(例如为你运营的CRM或客户门户提供数据)、当你需要工具无法完成的提交后工作流、当数据存放位置或所有权是硬性要求,或者当表单是你所销售产品的一项功能时,建议自己搭建。

用Mythex搭建

在Mythex中,你可以在聊天中描述生成器,并在实时预览中并排测试编辑器和公开表单。Mythex会为表单定义和提交数据添加专用的数据库;当应用需要上传功能时,还会自动启用文件存储(免费套餐上限为1 GB)。通知邮件通过你使用自己密钥接入的服务商发送。将应用发布到mythex.ai链接(Pro套餐可使用自己的域名),公开表单链接即可从该地址正常工作。

常见问题

表单生成器如何存储表单?

通常以表单定义的形式保存:一个字段列表,每个字段包含类型、标签、验证规则和顺序,并以JSON等结构化数据存储。同一份定义同时驱动编辑器和公开表单,因此新增字段无需编写新代码。

表单提交应该如何存储?

保存每条提交时对应的表单版本,并以字段ID为键保存答案。这样之后重命名或调整字段顺序,都不会破坏旧的提交记录。

如何阻止公开表单上的垃圾提交?

结合使用隐藏的蜜罐字段、按IP地址限流、服务器端验证,如果垃圾提交仍然存在,再加上验证码服务。切勿只依赖浏览器端的检查。

我需要完整的表单生成器,还是只需要一个表单?

如果你只需要一两个固定表单,直接搭建这些表单即可,简单得多。只有当非技术人员需要自己创建和修改大量表单、而无需找开发人员时,表单生成器才值得投入。

Mythex · Pricing · 用 AI 构建任何东西 · 网站和应用模板 · Mythex 对比 · AI 应用构建术语表 · 免费的 AI 应用构建工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 繁體中文(香港) 繁體中文(台灣)