婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Python Flask請求擴展與中間件相關知識總結

Python Flask請求擴展與中間件相關知識總結

熱門標簽:打電話機器人營銷 ai電銷機器人的優勢 地圖標注自己和別人標注區別 商家地圖標注海報 孝感營銷電話機器人效果怎么樣 南陽打電話機器人 海外網吧地圖標注注冊 聊城語音外呼系統 騰訊地圖標注沒法顯示

一、請求擴展

1.before_request

作用: 類比django中間件中的process_request,在請求到來執行路由函數之前先執行. 但是如果有多個順序是從上往下執行.

應用: 基于它做用戶登錄認證

注意: 如果before_request的返回值不是None的清空下, 返回的而是別的值, 那么后續的請求都不會執行,本次請求直接返回, 如果定義了after_request那么會接著它執行, 最終本次請求響應結束.

@app.before_request
def process_request(*args,**kwargs):
    if request.path == '/login':
        return None
    user = session.get('user_info')
    if user:
        return None
    return redirect('/login') 

2.after_request

作用: 類比django中間件中的process_response,如果請求沒有出現異常的情況下, 會在請求返回return之前執行. 但是如果有多個順序是從下往上執行.

@app.after_request  # 后執行
def process_response1(response):
    print('process_response1 走了')
    return response

@app.after_request  # 先執行
def process_response2(response):
    print('process_response2 走了')
    return response

3.before_first_request

作用: 項目啟動起來接收到第一次請求時執行.

應用: 項目初始化用來保證以后項目只要不重啟就不再繼續執行.

@app.before_first_request
def first():
    print('我的第一次')

4. teardown_request

作用: 在每一個路由函數執行完畢之后執行,即使遇到了異常也會執行. (提示: 返回reutrn沒有任何的效果, 不能控制返回的結果)

應用: 記錄日志

@app.teardown_request  
def ter(e):  # e就是上一個路由函授執行過程中出現被捕獲的異常信息.
    print(e)
    print('我是teardown_request ')

5.errorhandler

作用: 綁定錯誤的狀態碼進而可以捕獲服務器的錯誤, 并返回對應的錯誤頁面.

@app.errorhandler(500)
def error_500(arg):
    return render_template('error.html', message='500錯誤')


@app.errorhandler(404)
def error_404(arg):
    return render_template('error.html', message='404錯誤')

6.template_global

作用: 全局的標簽, 在任意的html頁面中就可以直接使用, 不需要在render_template中傳遞參數以后才能使用.

@app.template_global()
def sb(a1, a2):
    return a1 + a2

# html頁面中直接使用, 不需要傳遞參數.
{{ sb(1,2) }}

7.template_filter

@app.template_filter()
def db(a1, a2, a3):
    return a1 + a2 + a3

# html頁面中直接使用, 不需要傳遞參數. 其中1傳遞給a1, 2傳遞給a2, 3傳遞給a3. (提示: Django中的過濾器最多只可以傳遞二個參數)
{{ 1|db(2,3) }}

總結:

1.重點掌握before_requestafter_request

2.注意有多個的情況,執行順序

3.before_request請求攔截后(也就是有return值),response所有都執行

二、中間件

class Md(object):
    def __init__(self, old_wsgi_app):
        self.old_wsgi_app = old_wsgi_app

    def __call__(self, environ, start_response):
        print('開始之前')
        ret = self.old_wsgi_app(environ, start_response)
        print('結束之后')
        return ret


if __name__ == '__main__':
    # 1. 我們發現當執行app.run方法的時候,最終執行run_simple,最后執行app(),也就是在執行app.__call__方法
    # 2. 在__call__里面,執行的是self.wsgi_app().那我們希望在執行他本身的wsgi之前做點事情。
    # 3. 所以我們先用Md類中__init__,保存之前的wsgi,然后我們用將app.wsgi轉化成Md的對象。
    # 4. 那執行新的的app.wsgi_app,就是執行Md的__call__方法。
    # 5. 最后把原來的wsgi_app替換為自定義的

    app.wsgi_app = Md(app.wsgi_app)
    app.run()

到此這篇關于Python Flask請求擴展與中間件相關知識總結的文章就介紹到這了,更多相關Flask請求擴展與中間件內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Flask搭建一個API服務器的步驟
  • flask框架實現修改密碼和免密登錄功能
  • 如何使用flask將模型部署為服務
  • 使用Flask和Django中解決跨域請求問題
  • 使用Django和Flask獲取訪問來源referrer

標簽:撫州 揚州 六盤水 南寧 聊城 牡丹江 迪慶 楊凌

巨人網絡通訊聲明:本文標題《Python Flask請求擴展與中間件相關知識總結》,本文關鍵詞  Python,Flask,請求,擴展,與,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python Flask請求擴展與中間件相關知識總結》相關的同類信息!
  • 本頁收集關于Python Flask請求擴展與中間件相關知識總結的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 彩票| 怀宁县| 中牟县| 新津县| 县级市| 鄂托克前旗| 文昌市| 子洲县| 巴彦淖尔市| 广河县| 抚宁县| 仙游县| 临高县| 门源| 天气| 巴楚县| 新巴尔虎右旗| 汉阴县| 房产| 梨树县| 玉田县| 射洪县| 湖北省| 安丘市| 密山市| 东兰县| 岑巩县| 顺昌县| 曲周县| 鄂尔多斯市| 镇沅| 高邑县| 永清县| 安图县| 天门市| 峨眉山市| 湖州市| 庄浪县| 太康县| 绍兴县| 香港 |