@(Python学习-随手记)[Flask_restful, 帮助]html
Exception
异常、HTTPException
异常、仍是及其子类异常均可以实现自定义错误信息Exception
异常,则会在控制台打印Traceback信息
,而HTTPException
异常则不会。因此若是是与HTTP 请求相关的自定义异常,继承自HTTPException
较为合适debug
设置为false
:app.run(debug=False)
,不然就会进入debug模式并显示http stacktrace错误。
postman
模拟浏览器请求from flask import Flask from flask_restful import Resource, Api, abort,HTTPException from werkzeug.exceptions import BadRequest app = Flask(__name__) # api = Api(app,errors=errors) api = Api(app) class DemoTest(Resource): # 定义类继承Resouce def get(self): raise TypeError(u"错了吧") # 将资源类挂载在'/'路由下 api.add_resource(DemoTest,'/') if __name__ == '__main__': app.run(debug=False)
当使用postman
请求127.0.0.1:5000
时,出现500错误
python
若是这样的错误信息和状态码并非咱们想要的,或者并非很友好,怎么解决,这时须要自定义错误信息web
#!/use/bin/python # --*-- coding: utf-8 -*- from flask import Flask from flask_restful import Resource, Api, abort,HTTPException from werkzeug.exceptions import BadRequest errors = { # StandardError(Exception)的子类 "TypeError":{ 'message': "TypeError 错误信息已被修改", 'status': 200, 'extra': "TypeError 被修改了,你看吧", } } app = Flask(__name__) api = Api(app,errors=errors) class DemoTest(Resource): # 定义类继承Resouce def get(self): raise TypeError(u"错了吧") # 将资源类挂载在'/'路由下 api.add_resource(DemoTest,'/') if __name__ == '__main__': app.run(debug=False)
errors
,key
表示异常类名,value
表示自定义的错误信息,包括message
,status
,extra
信息api = Api(app,errors=errors)
postman
请求127.0.0.1:5000
时,即便人为的抛出TypeError
异常,但咱们修改了错误信息,致使请求依然会成功#!/use/bin/python # --*-- coding: utf-8 -*- from flask import Flask from flask_restful import Resource, Api, abort,HTTPException from werkzeug.exceptions import BadRequest errors = { # StandardError(Exception)的子类 "TypeError":{ 'message': "TypeError 错误信息已被修改", 'status': 200, 'extra': "TypeError 被修改了,你看吧", }, # HTTPException的子类 # "BadRequest":{ # 'message': "BadRequest 错误信息已被修改", # 'status': 200, # 'extra': "BadRequest 被修改了,你看吧", # } } app = Flask(__name__) api = Api(app,errors=errors) class DemoTest(Resource): # 定义类继承Resouce def get(self): # 抛出 HTTPException 异常 raise BadRequest() # 将资源类挂载在'/'路由下 api.add_resource(DemoTest,'/') if __name__ == '__main__': app.run(debug=False)
此次咱们人为抛出HTTPException子类异常
,若是不修改错误信息则返回以下:
json
源代码:BadRequest(HTTPException)
flask
class BadRequest(HTTPException): """*400* `Bad Request` Raise if the browser sends something to the application the application or server cannot handle. """ code = 400 description = ( 'The browser (or proxy) sent a request that this server could ' 'not understand.' )
postman
请求返回200状态码#!/use/bin/python # --*-- coding: utf-8 -*- from flask import Flask from flask_restful import Resource, Api, abort,HTTPException from werkzeug.exceptions import BadRequest errors = { # StandardError(Exception)的子类 "TypeError":{ 'message': "TypeError 错误信息已被修改", 'status': 200, 'extra': "TypeError 被修改了,你看吧", }, # HTTPException的子类 "BadRequest":{ 'message': "BadRequest 错误信息已被修改", 'status': 200, 'extra': "BadRequest 被修改了,你看吧", } } app = Flask(__name__) api = Api(app,errors=errors) class DemoTest(Resource): # 定义类继承Resouce def get(self): # 抛出 HTTPException 异常 raise BadRequest() # 抛出Exception 异常 # raise TypeError(u"错了吧") # 将资源类挂载在'/'路由下 api.add_resource(DemoTest,'/') if __name__ == '__main__': app.run(debug=False)
class flask.ext.restful.Api(app=None, prefix='', default_mediatype='application/json', decorators=None, catch_all_404s=False, url_part_order='bae', errors=None) 其中: errors () – A dictionary to define a custom response for each exception or error raised during a request
define-custom-error-messages
custom-error-message-json-object-with-flask-restfulapi