如何在Ajax验证中使用WTForms?

swd*_*dev 15 python flask wtforms flask-wtforms

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

我还没有在互联网上找到资源

Mig*_*uel 12

可能的解决方案如下:

  • 在客户端,您blur可以在表单中的所有控件中为事件附加处理程序.

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

  • 在服务器上,处理此ajax POST请求的视图函数实例化Flask-WTF表单,然后验证它.验证产生的任何错误都会收集到字典中,然后通过JSON响应发送回客户端.

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

    { 
        "errors": {}
    }
    
    Run Code Online (Sandbox Code Playgroud)

    包含错误的响应可能是:

    {
        "errors": { 
            "name": "This field is required",
            "age": "Enter a numeric value between 0 and 99"
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 客户端获取此JSON响应并将所需的更改应用于DOM以公开错误.

  • 如果在前一个返回之前得到一个新的模糊事件,您可能希望中止挂起的ajax POST并启动一个带有更新字段值的新事件.您应该一次只有一个待处理的验证请求,以避免竞争条件.

  • 需要指出的是:虽然这种方法将验证代码保存在一个地方(不需要在JavaScript中编写冗余代码来进行真正的客户端验证),但它确实会为服务器创建大量流量,特别是在表单变大的情况下.在每次模糊时,必须进行完整的往返行程,其中还必须运行整个Flask/WTForms代码.但正如所说,要进行真正的客户端验证,必须在JavaScript中编写或多或少的重复验证代码.选择... (4认同)