最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

django如何自己創(chuàng)建一個中間件

 更新時間:2019年07月24日 10:34:59   作者:苦瓜爆炒牛肉  
這篇文章主要介紹了django如何自己創(chuàng)建一個中間件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

中間件是什么?

中間件是類似flask函數(shù)中鉤子函數(shù)的東西。可以在請求視圖函數(shù)前,或者視圖函數(shù)響應后處理某些事情。中間件對全部視圖都有效!

中間件一般會有兩個方法,process_request和process_response。分別用來處理請求到達視圖函數(shù)前,到達視圖函數(shù)后的事情。

編寫一個自定義的中間件

我們可以根據(jù)業(yè)務需要自己編寫一個中間件。在編寫中間件前,你需要讀一下django.utils.deprecation.MiddlewareMixin的源碼。

class MiddlewareMixin(object):
  def __init__(self, get_response=None):
    self.get_response = get_response
    super(MiddlewareMixin, self).__init__()

  def __call__(self, request):
    response = None
    if hasattr(self, 'process_request'):
      response = self.process_request(request)
    if not response:
      response = self.get_response(request)
    if hasattr(self, 'process_response'):
      response = self.process_response(request, response)
    return response

方法名 作用 返回值 備注
__init__(self, get_response=None) 服務器啟動(重啟)時執(zhí)行一次 --
process_request(self, request) 在視圖執(zhí)行之前調(diào)用
  • 返回 `None`: 會執(zhí)行視圖
  • 返回 `HttpResponse`: 不會再執(zhí)行視圖
--
process_response(self, request, response) 在視圖執(zhí)行完之后調(diào)用 必須返回HttpResponse對象 --

編寫自定義的中間件:

class My_middleware(MiddlewareMixin):
  def __init__(self,get_response=None):
    super().__init__(get_response)

  def process_request(self,request):
    """
    視圖函數(shù)前執(zhí)行的,一旦這里有return將到達不了視圖函數(shù)
    request是瀏覽器發(fā)過來的請求
    """
    print("視圖函數(shù)執(zhí)行前")

  def process_response(self,request,response):
    """
    視圖函數(shù)后執(zhí)行的
    request是瀏覽器發(fā)過來的請求
    response是視圖函數(shù)返回的響應
    """
    print("視圖函數(shù)執(zhí)行后")

    # 因為你拿了視圖函數(shù)的response,就算處理的業(yè)務與response無關也要返回response
    return response

中間件的注冊

MIDDLEWARE = [
  ...
  'middlewares.My_middleware'  # 寫上自己的路徑
]

多個中間件的執(zhí)行順序

?。?!如果你定義了多個中間件,記得注意一下中間件擺在setting.py文件的位置:

  • 注冊中間件設置是由上到下執(zhí)行的,所以上面的中間件會先被注冊
  • 對于視圖函數(shù)執(zhí)行前的process_request,先注冊的中間件會先執(zhí)行
  • 對于視圖函數(shù)執(zhí)行后的process_response,后注冊的中間件會先執(zhí)行

例如:

先注冊中間件1,后注冊中間件2。

輸出結(jié)果是:

before 視圖(中間件1)
before 視圖 2(中間件2)
==index==
after 視圖 2(中間件2)
after 視圖(中間件1)

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • python雙端隊列原理、實現(xiàn)與使用方法分析

    python雙端隊列原理、實現(xiàn)與使用方法分析

    這篇文章主要介紹了python雙端隊列原理、實現(xiàn)與使用方法,結(jié)合實例形式分析了Python雙端隊列的概念、原理、定義及使用方法,需要的朋友可以參考下
    2019-11-11
  • 深入了解python裝飾器

    深入了解python裝飾器

    這篇文章主要介紹了解python裝飾器,裝飾器定義一個為其他函數(shù)添加功能的函數(shù),裝飾器就是在不修改裝飾對象源代碼以及調(diào)用方式的前提下,為裝飾對象添加新功能,下面和小編一起進入文章內(nèi)容了解更多知識,需要的朋友可以參考一下
    2022-03-03
  • OpenCV利用手勢識別實現(xiàn)虛擬拖放效果

    OpenCV利用手勢識別實現(xiàn)虛擬拖放效果

    這篇文章主要介紹了利用OpenCV實現(xiàn)手勢識別,從而進行虛擬拖放效果,我們可以使用這個技術(shù)實現(xiàn)一些游戲,控制機械臂等很多有趣的事情。感興趣的可以學習一下
    2022-01-01
  • 基于Python安裝pyecharts所遇的問題及解決方法

    基于Python安裝pyecharts所遇的問題及解決方法

    今天小編就為大家分享一篇基于Python安裝pyecharts所遇的問題及解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python字符串編碼轉(zhuǎn)換 encode()和decode()方法詳細說明

    Python字符串編碼轉(zhuǎn)換 encode()和decode()方法詳細說明

    這篇文章主要介紹了Python字符串編碼轉(zhuǎn)換 encode()和decode()方法詳細的說明,下面文章圍繞encode()和decode()方法的相相關資料展開內(nèi)容,具有一定的價值,需要的朋友卡通參考一下
    2021-12-12
  • python創(chuàng)建進程fork用法

    python創(chuàng)建進程fork用法

    這篇文章主要介紹了python創(chuàng)建進程fork用法,實例分析了Python使用fork創(chuàng)建進程的使用方法,需要的朋友可以參考下
    2015-06-06
  • python中視頻音頻的剪輯與處理實現(xiàn)

    python中視頻音頻的剪輯與處理實現(xiàn)

    Python中輕松實現(xiàn)各種視頻處理操作,包括剪輯、合并、添加音頻、文本、特效等多種功能,主要介紹了python中視頻音頻的剪輯與處理實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • Python獲取女友聊天記錄詳細流程

    Python獲取女友聊天記錄詳細流程

    就在前段時間,在大學睡我上鋪的兄弟,在兄嘚群里討論,說:他發(fā)現(xiàn)女朋友這幾天只要下班就坐在電腦前,不是工作原因。而且只要他靠近一點就會立即退出頁面,所以他一直很懷疑,在群里問我們這一個個單身狗。然后就出現(xiàn)下面這一段對話
    2021-10-10
  • PyTorch實現(xiàn)AlexNet示例

    PyTorch實現(xiàn)AlexNet示例

    今天小編就為大家分享一篇PyTorch實現(xiàn)AlexNet示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python?Panda中索引和選擇?series?的數(shù)據(jù)

    Python?Panda中索引和選擇?series?的數(shù)據(jù)

    這篇文章主要介紹了Python?Panda中索引和選擇series的數(shù)據(jù),文章通過圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09

最新評論

乌拉特前旗| 应城市| 密山市| 沈丘县| 阜阳市| 连城县| 印江| 措勤县| 芜湖市| 太和县| 长兴县| 甘肃省| 丰原市| 邹城市| 雅安市| 米脂县| 岱山县| 教育| 涡阳县| 大安市| 增城市| 神农架林区| 太湖县| 岳阳市| 商城县| 嘉兴市| 肇庆市| 封丘县| 海宁市| 莆田市| 清原| 突泉县| 巨鹿县| 右玉县| 山阳县| 阳曲县| 兴安县| 万全县| 庐江县| 定陶县| 诸城市|