【问题标题】:How to use WTForms in Ajax validation?如何在 Ajax 验证中使用 WTForms?
【发布时间】:2013-11-22 19:39:00
【问题描述】:

我习惯于在我的烧瓶应用程序中通过 Flask-WTF 使用 WTForms。进行服务器端验证是微不足道的。但是我如何利用这个服务器验证成为字段级别、ajax、客户端验证?因此,当用户选项卡到另一个输入字段时,我的应用程序可以直接继续验证它并给出验证警告/信息/错误。

我还没有在网上找到资源

【问题讨论】:

  • 如果您的应用程序需要尽可能安全,则服务器端和客户端验证代码之间不存在冗余。我通常都这样做。

标签: python flask wtforms flask-wtforms


【解决方案1】:

一个可能的解决方案如下:

  • 在客户端,您将处理程序附加到表单中所有控件中的blur 事件。

  • 每次发生模糊事件时,您都会运行一个 Javascript 函数来收集所有字段的值,然后将它们作为 ajax POST 请求提交。

  • 在服务器上,处理这个 ajax POST 请求的视图函数会实例化 Flask-WTF 表单,然后对其进行验证。验证导致的任何错误都会收集到字典中,然后以 JSON 响应的形式发送回客户端。

    例如,成功的验证可能会返回以下 JSON:

    { 
        "errors": {}
    }
    

    包含错误的响应可能是:

    {
        "errors": { 
            "name": "This field is required",
            "age": "Enter a numeric value between 0 and 99"
        }
    }
    
  • 客户端获取此 JSON 响应并将所需的更改应用于 DOM 以暴露错误。

  • 1234563您一次应该只有一个待处理的验证请求,以避免出现竞争条件。

【讨论】:

  • 太棒了!明确的答案。目前我也在研究这个,虽然体验是客户端验证,但实际上它是由 ajax 发布请求调用的服务器端验证。完成此任务后,我将更新我的问题。谢谢。
  • 只是要指出:虽然这种方法将验证代码保存在一个地方(无需在 JavaScript 中编写冗余代码来进行真正的客户端验证),但它确实会为服务器带来大量流量,特别是如果表格变大。每次模糊都必须进行一次完整的往返,其中还必须运行整个 Flask/WTForms 代码。但如前所述,要进行真正的客户端验证,必须在 JavaScript 中或多或少地编写重复的验证代码。选择...
  • @Miguel,您有任何资源用于此类实施吗?我正在尝试在我的验证过程中实施此解决方案,
【解决方案2】:

一个很好的问题。这就是我们所做的(flask 后端、jquery 前端):

  • 使用 jquery.forms 插件来 ajax 表单。相当可靠的成熟代码。缺点,不能发送json编码的数据,只能form-urlencoded。接收普通或 json 数据。
  • 使用 wtfroms 进行表单验证。非常成熟的代码库。
  • 尝试使用 wtforms-json 来接受 json,非常棘手的问题。

【讨论】:

  • 我一直在考虑 wtforms-json。你能扩展一下你的经验吗?
  • 为我工作。非常透明,但我确实指定了库的具体版本。由于它修补了其他库,我会改变让包更新到最新的......
猜你喜欢
  • 2019-05-10
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 2021-01-30
  • 2023-02-10
  • 1970-01-01
  • 2020-10-02
相关资源
最近更新 更多