最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【基本解决】Flask-Restful的api当不满足条件时返回自定义信息

Flask crifan 4013浏览 0评论

之前用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参数不满足要求的错误。

python – flask restful and sqlalchemy error: "uname": "Missing required parameter in the JSON body" – Stack Overflow

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"
}

转载请注明:在路上 » 【基本解决】Flask-Restful的api当不满足条件时返回自定义信息

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
89 queries in 0.190 seconds, using 22.16MB memory