欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

中間件是什么?

中間件是類似flask函數(shù)中鉤子函數(shù)的東西??梢栽谡?qǐng)求視圖函數(shù)前,或者視圖函數(shù)響應(yīng)后處理某些事情。中間件對(duì)全部視圖都有效!

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

編寫一個(gè)自定義的中間件

我們可以根據(jù)業(yè)務(wù)需要自己編寫一個(gè)中間件。在編寫中間件前,你需要讀一下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) 服務(wù)器啟動(dòng)(重啟)時(shí)執(zhí)行一次 --
process_request(self, request) 在視圖執(zhí)行之前調(diào)用
  • 返回 `None`: 會(huì)執(zhí)行視圖
  • 返回 `HttpResponse`: 不會(huì)再執(zhí)行視圖
--
process_response(self, request, response) 在視圖執(zhí)行完之后調(diào)用 必須返回HttpResponse對(duì)象 --

編寫自定義的中間件:

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

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

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

    # 因?yàn)槟隳昧艘晥D函數(shù)的response,就算處理的業(yè)務(wù)與response無關(guān)也要返回response
    return response

中間件的注冊(cè)

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

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

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

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

例如:

先注冊(cè)中間件1,后注冊(cè)中間件2。

輸出結(jié)果是:

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

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

相關(guān)文章

  • pytorch 刪除空權(quán)重模型文件夾的方法

    pytorch 刪除空權(quán)重模型文件夾的方法

    如果文件夾exp開頭的文件夾,里面沒有pt pth模型文件,就把目錄刪掉,本文通過示例代碼介紹pytorch 刪除空權(quán)重模型文件夾的方法,感興趣的朋友一起看看吧
    2023-11-11
  • pytorch + visdom 處理簡單分類問題的示例

    pytorch + visdom 處理簡單分類問題的示例

    這篇文章主要介紹了pytorch + visdom 處理簡單分類問題的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • Python常用驗(yàn)證碼標(biāo)注和識(shí)別(需求分析和實(shí)現(xiàn)思路)

    Python常用驗(yàn)證碼標(biāo)注和識(shí)別(需求分析和實(shí)現(xiàn)思路)

    通過本文的介紹,我們了解了Python在常用驗(yàn)證碼標(biāo)注和識(shí)別方面的應(yīng)用,在實(shí)際項(xiàng)目中,我們可以根據(jù)具體需求選擇合適的模型和工具,實(shí)現(xiàn)高效、準(zhǔn)確的驗(yàn)證碼標(biāo)注和識(shí)別,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • 在Python中使用SimpleParse模塊進(jìn)行解析的教程

    在Python中使用SimpleParse模塊進(jìn)行解析的教程

    這篇文章主要介紹了在Python中使用SimpleParse模塊進(jìn)行解析的教程,文章來自于IBM官方的開發(fā)者技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • python編程使用協(xié)程并發(fā)的優(yōu)缺點(diǎn)

    python編程使用協(xié)程并發(fā)的優(yōu)缺點(diǎn)

    協(xié)程是一種用戶態(tài)的輕量級(jí)線程,又稱微線程。這篇文章主要介紹了python編程使用協(xié)程并發(fā)的優(yōu)缺點(diǎn),感興趣的朋友跟隨小編一起看看吧
    2018-09-09
  • Python Tkinter之事件處理詳解

    Python Tkinter之事件處理詳解

    事件處理,是 GUI 程序中不可或缺的重要組成部分,相比來說,控件只是組成一臺(tái)機(jī)器的零部件。本文我們將對(duì) Tkinter 中的事件處理機(jī)制做詳細(xì)的介紹,需要的可以參考一下
    2022-01-01
  • python numpy和list查詢其中某個(gè)數(shù)的個(gè)數(shù)及定位方法

    python numpy和list查詢其中某個(gè)數(shù)的個(gè)數(shù)及定位方法

    今天小編就為大家分享一篇python numpy和list查詢其中某個(gè)數(shù)的個(gè)數(shù)及定位方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 如何實(shí)現(xiàn)在pycharm中將.ui文件轉(zhuǎn)化為.py文件

    如何實(shí)現(xiàn)在pycharm中將.ui文件轉(zhuǎn)化為.py文件

    這篇文章主要介紹了如何實(shí)現(xiàn)在pycharm中將.ui文件轉(zhuǎn)化為.py文件,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-06-06
  • Python通過tkinter實(shí)現(xiàn)百度搜索的示例代碼

    Python通過tkinter實(shí)現(xiàn)百度搜索的示例代碼

    這篇文章主要介紹了Python通過tkinter實(shí)現(xiàn)百度搜索的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • PyTorch零基礎(chǔ)入門之構(gòu)建模型基礎(chǔ)

    PyTorch零基礎(chǔ)入門之構(gòu)建模型基礎(chǔ)

    PyTorch是一個(gè)開源的Python機(jī)器學(xué)習(xí)庫,基于Torch,用于自然語言處理等應(yīng)用程序,它是一個(gè)可續(xù)計(jì)算包,提供兩個(gè)高級(jí)功能:1、具有強(qiáng)大的GPU加速的張量計(jì)算(如NumPy)。2、包含自動(dòng)求導(dǎo)系統(tǒng)的深度神經(jīng)網(wǎng)絡(luò)
    2021-10-10

最新評(píng)論