自定義Django中間件的知識詳解(十二)

一邀杏、Django 中間件的運行流程

  • django的生命周期是:前端請求--->nginx--->uwsgi--->中間件--->url路由---->view試圖--->orm---->拿到數(shù)據(jù)返回給view---->試圖將數(shù)據(jù)渲染到模版中拿到字符串---->中間件--->uwsgi---->nginx---->前端渲染贫奠。
  • Django中的中間件是一個輕量級、底層的插件系統(tǒng)望蜡,可以介入Django的請求和響應處理過程,修改Django的輸入或輸出脖律。中間件的設計為開發(fā)者提供了一種無侵入式的開發(fā)方式谢肾,增強了Django框架的健壯性。
  • 我們可以使用中間件小泉,在Django處理視圖的不同階段對輸入或輸出進行干預芦疏。

二冕杠、中間件的定義方法

  • 定義一個中間件工廠函數(shù),然后返回一個可以別調用的中間件分预。

  • 中間件工廠函數(shù)需要接收一個可以調用的get_response對象。

  • 返回的中間件也是一個可以被調用的對象薪捍,并且像視圖一樣需要接收一個request對象參數(shù)笼痹,返回一個response對象。

  • 中間件的示例如下:

def middleware(get_response):
    # 此處編寫的代碼僅在Django第一次配置和初始化的時候執(zhí)行一次酪穿。

    def middleware(request):
        # 此處編寫的代碼會在每個請求處理視圖前被調用凳干。

        response = get_response(request)

        # 此處編寫的代碼會在每個請求處理視圖之后被調用。

        return response

    return middleware
  • 例如被济,在users應用中新建一個middleware.py文件
def my_middleware(get_response):
    print('init 被調用')
    def middleware(request):
        print('before request 被調用')
        response = get_response(request)
        print('after response 被調用')
        return response
    return middleware

'users.middleware.my_middleware',  # 添加中間件
  • 定義一個視圖函數(shù)進行測試在users.py文件下進行定義
def demo_view(request):
    print('view 視圖被調用')
    return HttpRespon se('OK')

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

以下是在項目主目錄下settings.py文件下進行

  • 在請求視圖被處理只磷,中間件由上至下依次執(zhí)行
  • 在請求視圖被處理经磅,中間件由下至上依次執(zhí)行
舉例:重新定義一個中間件
def my_middleware2(get_response):
    print('init2 被調用')
    def middleware(request):
        print('before request 2 被調用')
        response = get_response(request)
        print('after response 2 被調用')
        return response
    return middleware

四、知識點補充

1喳瓣、如果開啟django的時候端口被占用,可用下面的方式來查看端口的情況赞别。

ps  -e  | grep python

2畏陕、殺死被占用的端口

kill  -9 端口號
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末仿滔,一起剝皮案震驚了整個濱河市惠毁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌崎页,老刑警劉巖鞠绰,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異飒焦,居然都是意外死亡,警方通過查閱死者的電腦和手機牺荠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門翁巍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人休雌,你說我怎么就攤上這事灶壶。” “怎么了杈曲?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵胸懈,是天一觀的道長。 經(jīng)常有香客問我恰响,道長趣钱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任渔隶,我火速辦了婚禮羔挡,結果婚禮上,老公的妹妹穿的比我還像新娘间唉。我一直安慰自己,他們只是感情好呈野,可當我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布低矮。 她就那樣靜靜地躺著,像睡著了一般被冒。 火紅的嫁衣襯著肌膚如雪军掂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天昨悼,我揣著相機與錄音,去河邊找鬼率触。 笑死终议,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的葱蝗。 我是一名探鬼主播穴张,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼两曼!你這毒婦竟也來了皂甘?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤偿枕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后户辫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體益老,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年寸莫,在試婚紗的時候發(fā)現(xiàn)自己被綠了捺萌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡桃纯,死狀恐怖酷誓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情态坦,我是刑警寧澤盐数,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站伞梯,受9級特大地震影響玫氢,放射性物質發(fā)生泄漏。R本人自食惡果不足惜谜诫,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望喻旷。 院中可真熱鬧生逸,春花似錦、人聲如沸且预。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锋谐。三九已至遍尺,卻和暖如春涮拗,著一層夾襖步出監(jiān)牢的瞬間乾戏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工多搀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留歧蕉,地道東北人灾部。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓康铭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親赌髓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,654評論 2 354