flask 拋出異常
abort 方法
拋出一個給定狀態代碼的 HTTPException 或者 指定響應,例如想要用一個頁面未找到異常但你想終止請求,你可以調用 abort(404)。
@app.route("/demo1") def demo1(): abort(404) # 拋出404錯誤 return "拋出404"
捕獲異常
errorhandler 裝飾器
當程序拋出指定錯誤狀態碼的時候,就會調用該裝飾器所裝飾的方法
參數:code_or_exception – HTTP的錯誤狀態碼
# 捕獲相關狀態碼,然后進行處理 @app.errorhandler(404) def internal_server_error(e): return '服務器搬家了' # 捕獲指定異常,然后進行處理 @app.errorhandler(ZeroDivisionError) def zero_division_error(e): return '除數不能為0'
請求鈎子
在客戶端和服務器交互的過程中,有些准備工作或掃尾工作需要處理,比如:
- 在請求開始時,建立數據庫連接;
- 在請求開始時,根據需求進行權限校驗;
- 在請求結束時,指定數據的交互格式;
1.before_first_request:在第一次請求之前運行,只需執行一次,如鏈接數據庫
2.before_request:在每一次請求都會執行,可以在這里做權限校驗操作,比如說某用戶是黑名單用戶,黑名單用戶登錄系統將遭到拒絕訪問,可以使用before_request進行權限校驗。
3.after_request:在請求之后運行,會接收一個參數,這個參數就是前面的請求處理完畢之后, 返回的響應數據,如果需要對響應做額外處理,可以再這里進行。
4.teardown_request:每一次請求之后都會調用,會接受一個參數,參數是服務器出現的錯誤信息
from flask import Flask app = Flask(__name__) @app.route('/') def helloworld(): return 'hello world' # 在第一次請求之前運行. # 例子: 比如連接數據庫操作, 只需要執行一次 @app.before_first_request def before_first_request(): print('before_first_request') # 在每一次請求都會執行 # 例子: 可以在這里做權限校驗操作,比如說某用戶是黑名單用戶,黑名單用戶登錄系統將遭到拒絕訪問,可以使用 # before_request進行權限校驗 @app.before_request def before_request(): print('before_request') # 在請求之后運行 @app.after_request def after_request(response): # response: 就是前面的請求處理完畢之后, 返回的響應數據 # 如果需要對響應做額外處理,可以再這里進行 # json.dumps 配置請求鈎子 # response.headers["Content-Type"] = "application/json" print('after_request') return response # 每一次請求之后都會調用,會接受一個參數,參數是服務器出現的錯誤信息 @app.teardown_request def teardown_request(error): # 數據庫的擴展, 可以實現自動提交數據庫 print('teardown_request: error %s' % error) if __name__ == '__main__': app.run(debug=True