Flask_restful 之 自定義錯誤資訊
Flask_restful 之 自定義錯誤資訊
@(Python學習-隨手記)[Flask_restful, 幫助]
- 注意:
- 無論是
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錯誤
-
如果這樣的錯誤資訊和狀態碼並不是我們想要的,或者並不是很友好,怎麼解決,這時需要自定義錯誤資訊
自定義錯誤資訊(Exception)
#!/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 = Api(app,errors=errors)
- 當
postman
請求127.0.0.1:5000
時,即使人為的丟擲TypeError
異常,但我們修改了錯誤資訊,導致請求依然會成功
自定義錯誤資訊(HTTPException)
#!/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子類異常
,如果不修改錯誤資訊則返回如下:
-
原始碼:
BadRequest(HTTPException)
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-restful
相關文章
- 自定義 ocelot 中介軟體輸出自定義錯誤資訊
- jQuery Validate自定義驗證錯誤資訊jQuery
- jQuery Validate自定義錯誤資訊顯示位置jQuery
- Flask-restful 用法及自定義引數錯誤資訊FlaskREST
- Laravel 5.5 Validator 自定義錯誤返回訊息Laravel
- Laravel/Lumen 自定義錯誤日誌格式過濾堆疊資訊Laravel
- 自定義OAM錯誤頁面
- 教你自定義Flutter錯誤頁面Flutter
- [系列] Gin框架 - 自定義錯誤處理框架
- springboot自定義 404 500錯誤頁面Spring Boot
- 自定義 serializers.ValidationError 的錯誤返回Error
- PbootCMS自定義前臺404錯誤頁面boot
- Laravel 自定義錯誤、錯與提示漢化最簡方案Laravel
- 測試開發專題:spring-boot自定義返回引數校驗錯誤資訊Springboot
- Kong Gateway 修改原始碼完成自定義錯誤返回Gateway原始碼
- IIS瀏覽器422、500等錯誤提示:自定義錯誤模組不能識別此錯誤瀏覽器
- JavaScript錯誤資訊JavaScript
- .net自定義錯誤頁面實現升級篇
- Go 錯誤堆疊資訊之 CockroachDB errors 庫GoError
- PyQT5之自定義訊號QT
- Laravel-admin 自定義擴充套件,jQuery 語法錯誤?Laravel套件jQuery
- 自定義錯誤型別時應該注意的 nil !=nil型別
- ThinkPHP框架中自定義錯誤頁面和提示頁面PHP框架
- Request 驗證錯誤沒有返回錯誤資訊?
- 中介軟體自定義檢測 JWT 並通過自定義異常丟擲錯誤--筆記JWT筆記
- Jwtauth 自定義認證頭資訊JWT
- Swing 自定義JTable 多選框 自動選擇的錯誤
- ES5 / ES6 自定義錯誤型別比較型別
- SAP錯誤訊息除錯之七種武器:讓所有的錯誤訊息都能被定位除錯
- 記錄一次根據錯誤資訊無法定位錯誤的錯誤
- 小白折騰伺服器(七):自定義介面錯誤響應格式伺服器
- 異常錯誤資訊處理
- 0176-列印錯誤提示資訊
- laravel5.7 不記錄 sql 報錯日誌,自定義日誌資訊LaravelSQL
- 【PageLayout】非常簡單的一鍵切換載入-空資料-錯誤頁,支援自定義
- 自定義View之SwitchViewView
- MapReduce之自定義OutputFormatORM
- MapReduce之自定義InputFormatORM