1. 程式人生 > >flask中請求勾子

flask中請求勾子

請求勾子

  在客戶端和伺服器互動的過程中,有些準備工作或掃尾工作需要處理,比如:
    *在請求開始時,建立資料庫連線;
    *在請求開始時,根據需求進行許可權校驗;
    *在請求結束時,指定資料的互動格式;

  為了讓每個檢視函式避免編寫重複功能的程式碼,Flask提供了通用設施的功能,即請求鉤子。

  請求鉤子是通過裝飾器的形式實現,Flask支援如下四種請求鉤子:
    ①before_first_request
      在處理第一個請求前執行
    ②before_request
      在每次請求前執行
      如果在某修飾的函式中返回了一個響應,檢視函式將不再被呼叫


    ③after_request
      如果沒有丟擲錯誤,在每次請求後執行
      接受一個引數:檢視函式作出的響應
      在此函式中可以對響應值在返回之前做最後一步修改處理
      需要將引數中的響應在此引數中進行返回

      例如設定csrf_token可以在請求後設置在response裡。
    ④teardown_request:
      在每次請求後執行
      接受一個引數:錯誤資訊,如果有相關錯誤丟擲

  程式碼測試:

      from flask import Flask

      from flask import abort

      app = Flask(__name__)


      

      # 在第一次請求之前呼叫,可以在此方法內部做一些初始化操作
      @app.before_first_request
      def before_first_request():
        print("before_first_request")
      

      # 在每一次請求之前呼叫,這時候已經有請求了,可能在這個方法裡面做請求的校驗
      # 如果請求的校驗不成功,可以直接在此方法中進行響應,直接return之後那麼就不會執行檢視函式
      @app.before_request
      def before_request():


        print("before_request")

      

      # 在執行完檢視函式之後會呼叫,並且會把檢視函式所生成的響應傳入,可以在此方法中對響應做最後一步統一的處理

      @app.after_request
      def after_request(response):
        print("after_request")
        response.headers["Content-Type"] = "application/json"

        return response

      # 請每一次請求之後都會呼叫,會接受一個引數,引數是伺服器出現的錯誤資訊
      @app.teardown_request
      def teardown_request(e):
        print("teardown_request")

      @app.route('/')
      def index():
        return 'index'

      if __name__ == '__main__':
        app.run(debug=True)

 

    在第1次請求時的列印:

      before_first_request

      before_request
      after_request
      teardown_request

    在第2次請求時的列印

    before_request

    after_request

    teardown_request