06-蓝图实战(图书数据搜索与查询),编写get和post请求,同时应用WTForms参数验证

马铃薯1 / 2024-10-10 / 原文

需求:之前的路由请求格式,不是通用的请求格式,转化为get 和 post请求之后,可以通过request方法获取其中的参数

@web.route('/book/search/<q>')
def search(q):
    pass

 

第三方插件库,WTForms

在flask内部并没有提供全面的表单验证,所以当我们不借助第三方插件来处理时候代码会显得混乱,而官方推荐的一个表单验证插件就是wtforms。

wtfroms是一个支持多种web框架的form组件,主要用于对用户请求数据的进行验证,其的验证流程与django中的form表单验证由些许类似,本文主要介绍wtforms组件使用方法以及验证流程。

wtforms依照功能主要分为以下几个类别:
  • Forms: 主要用于表单验证、字段定义、HTML生成,并把各种验证流程聚集在一起进行验证。
  • Fields: 主要负责渲染(生成HTML)和数据转换。
  • Validator:主要用于验证用户输入的数据的合法性。比如Length验证器可以用于验证输入数据的长度。
  • Widgets:html插件,允许使用者在字段中通过该字典自定义html小部件。
  • Meta:用于使用者自定义wtforms功能,例如csrf功能开启。
  • Extensions:丰富的扩展库,可以与其他框架结合使用,例如django。

注意:

WTForms 表单类 searchForm 期待的输入是一个支持 getlist 方法的 MultiDict 类型

1) get请求获取的 request.args 是MultiDict 类型

2) post请求获取的 request.get_json() 是普通dict 类型,因此需要转换为 MultiDict(request.get_json()) 类型


官方文档:WTForms — WTForms Documentation (3.1.x)
pip安装
pip install wtforms