之前用Flask-restful的api时,用代码:
class SmsCodeAPI(Resource): def __init__(self): self.reqparse = reqparse.RequestParser() self.reqparse.add_argument(‘phone’, type = str, location = ‘json’) self.reqparse.add_argument(‘type’, type = str, required=True, help=’No type provided for get sms code’, location = ‘json’) super(SmsCodeAPI, self).__init__() |
去访问时,缺少type参数时:
返回的是:
{ "message": { "type": "No type provided for get sms code" } } |
现在想要实现:
可以返回统一的格式,类似于正常的返回时的:
带code,message,xxx
{ "code": 200, "message": "OK", "smscode": "489348" } |
的格式
此处希望是:
{ "code": 100001, "message": "No type provided for get sms code", } |
flask-restful api required parameter return custom json
werkzeug – Custom error message json object with flask-restful – Stack Overflow
->
可以自己实现对应的函数,返回特定的json字符串。
但是不是此处的,重写reqired参数不满足要求的错误。
flask-restful custom add_argument required error
python – Nested validation with the flask-restful RequestParser – Stack Overflow
Customizing Flask-Restful | Coffee. On the rocks!
感觉还是需要自己去重写了。
flask-restful custom error
Raising A Custom Error with Flask-Restful – Stack Overflow
Extending Flask-RESTful — Flask-RESTful 0.2.1 documentation
虽然此处已经通过代码,自定义要返回的json了:
@api.representation(‘application/json’) def output_json(data, code, headers=None): gLog.debug("data=%s, code=%s, headers=%s", data, code, headers) resp = make_response(json.dumps(data), code) gLog.debug("resp=%s", resp) resp.headers.extend(headers or {}) gLog.debug("resp.headers=%s", resp.headers) return resp |
并且当模拟缺少type参数时的错误是400:
[2016-10-08 19:44:22,076 DEBUG __init__.py:69 output_json] data={‘message’: {‘type’: ‘No type provided for get sms code’}}, code=400, headers=Content-Type: text/html [2016-10-08 19:44:22,080 DEBUG __init__.py:71 output_json] resp=<Response 58 bytes [400 BAD REQUEST]> [2016-10-08 19:44:22,081 DEBUG __init__.py:73 output_json] resp.headers=Content-Type: text/html; charset=utf-8 Content-Length: 58 |
但是,还是无法捕获,reqparse的add_argument的设置required=True时的错误异常。
RequestParser add_argument
RequestParser add_argument required
算了,还是自己去自定义吧。
最后用代码:
class SmsCodeAPI(Resource): def __init__(self): self.reqparse = reqparse.RequestParser() self.reqparse.add_argument(‘phone’, type = str, default = None, location = ‘json’) self.reqparse.add_argument(‘type’, type = str, default = None, # required=True, # help=’Type must be provided when get sms code’, location = ‘json’) super(SmsCodeAPI, self).__init__() def post(self): args = self.reqparse.parse_args() gLog.debug("args=%s", args) type = args[‘type’] gLog.debug("type=%s", type) if type is None: respJsonDict = { "code": 400, "message": "Type must be provided when get sms code", } gLog.debug("respJsonDict=%s", respJsonDict) return respJsonDict |
在没有传入type参数时,输出:
{ "code": 400, "message": "Type must be provided when get sms code" } |