重新定义WTforms中的validate方法(增加了def validate_for_api),增加异常处理!
from wtforms import Form, validators, PasswordField
from app.libs.errors.forms_exception import FromsParameterException
class BaseClientForm(Form):
secretkey = PasswordField(validators=[validators.DataRequired("秘钥不能为空..."),
validators.Length(min=6, max=16, message="密码长度必须为6-16位")])
def __init__(self,formdata=None, obj=None, prefix='', data=None, meta=None, **kwargs):
super().__init__(formdata=formdata, obj=obj, prefix=prefix, data=data, meta=meta, **kwargs)
# 自定义校验器,并处理异常!
def validate_for_api(self):
if not super().validate():
raise FromsParameterException(self.errors)
重写HTTPException异常中的get_body和get_headers方法,返回异常json格式
from werkzeug.exceptions import HTTPException
from flask import json
from flask import request
#重写HTTPException异常中的get_body和get_headers方法,返回异常json格式
class APIException(HTTPException):
# 重写父类的方法
def get_body(self, environ=None):
"""Get the HTML body."""
return json.dumps(dict(
code= self.code,
name= self.name,
requert = request.method+">>"+request.url,
description= self.get_description(environ)
))
#重写父类的方法
def get_headers(self, environ=None):
"""Get a list of headers."""
return [('Content-Type', 'application/json')]
class FromsParameterException(APIException):
# 重写父类的属性
code = None
#如果description没有传入,则这个为默认参数(看HTTPException的构造函数)
description = "WTForms校验参数错误!"