flask 拋出異常捕獲異常 和 請求鈎子


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM