WTForms其实是非常强大的验证插件。但很多同学对WTForms的理解仅仅停留在“验证表单”上。那WTForms可以用来做API的参数验证码?完全可以,但这需要你灵活的使用它,对它做出一些“改变”。
默认情况下的form
验证出现异常的时候是不直接抛出的,存在于form
的errors
中,如果我们想直接抛出,就需要更改重写。
1 | from flask import request |
其中的ParameterException
就是前一篇我们学习的自定义异常类。
1 | class ParameterException(APIException): |
我们在自定义参数异常类的时候给msg
设定了一个默认值。当有具体的错误异常时候,直接传入该值即可。
完成上面的配置之后,我们的自定义Form
就完成了,然后在使用到WTForms
的地方进行更换。
1 | from app.validators.base import BaseForm as Form |
在视图函数中使用方式也有所改变。
1 |
|
其中的Success()
也是我们自定义的一个返回。
1 | class Success(APIException): |
我们可以接受定义时候的复杂,但是不能接收调用时的复杂。 – 七月老师
因为定义是一次性的,调用是多次性的。
我们在写代码的时候,对于可重用的代码尽量进行封装。
现在我们的代码中有两类异常:可以预知的已知异常,不可预知的未知异常。
对于已知异常我们可以进行指定格式的异常返回,但是对于未知异常怎么办呢?
AOP
思想:https://baike.baidu.com/item/AOP/1332219
我们在异常的最终抛出的地方进行拦截未知异常。
我们知道所有的异常类最终继承的都是Exception
类。
我们在入口文件进行最终异常捕捉。
1 | from werkzeug.exceptions import HTTPException |
其中的 ServerError
为我们自定义的异常类。
经过我们自定义异常类,我们系统里面的异常大致分为三类APIException
,HTTPException
,Exception
。
我们最想抛出的是APIException
,因此我们首先进行APIException
判断。