中間件

Django中的中間件是一個(gè)輕量級(jí)瀑罗、底層的插件系統(tǒng)胸嘴,可以介入Django的請(qǐng)求和響應(yīng)處理過程,修改Django的輸入或輸出斩祭。中間件的設(shè)計(jì)為開發(fā)者提供了一種無侵入式的開發(fā)方式劣像,增強(qiáng)了Django框架的健壯性,其它的MVC框架也有這個(gè)功能停忿,名稱為IoC驾讲。

Django在中間件中預(yù)置了五個(gè)方法,這五個(gè)方法的區(qū)別在于不同的階段執(zhí)行席赂,對(duì)輸入或輸出進(jìn)行干預(yù)吮铭,方法如下:

1)初始化:無需任何參數(shù),服務(wù)器響應(yīng)第一個(gè)請(qǐng)求的時(shí)候調(diào)用一次颅停,用于確定是否啟用當(dāng)前中間件谓晌。

def __init__(self):

pass

2)處理請(qǐng)求前:在每個(gè)請(qǐng)求上,request對(duì)象產(chǎn)生之后癞揉,url匹配之前調(diào)用纸肉,返回None或HttpResponse對(duì)象溺欧。

def process_request(self, request):

pass

3)處理視圖前:在每個(gè)請(qǐng)求上,url匹配之后柏肪,視圖函數(shù)調(diào)用之前調(diào)用姐刁,返回None或HttpResponse對(duì)象。

def process_view(self, request, view_func, *view_args, **view_kwargs):

pass

4)處理響應(yīng)后:視圖函數(shù)調(diào)用之后烦味,所有響應(yīng)返回瀏覽器之前被調(diào)用聂使,在每個(gè)請(qǐng)求上調(diào)用,返回HttpResponse對(duì)象谬俄。

def process_response(self, request, response):

pass

5)異常處理:當(dāng)視圖拋出異常時(shí)調(diào)用柏靶,在每個(gè)請(qǐng)求上調(diào)用,返回一個(gè)HttpResponse對(duì)象溃论。

def process_exception(self, request,exception):

pass



示例

中間件是一個(gè)獨(dú)立的python類屎蜓,,可以定義這五個(gè)方法中的一個(gè)或多個(gè)钥勋。

1)在booktest/目錄下創(chuàng)建middleware.py文件炬转,代碼如下:

class my_mid:

def __init__(self):

print '--------------init'

def process_request(self,request):

print '--------------request'

def process_view(self,request, view_func, *view_args, **view_kwargs):

print '--------------view'

def process_response(self,request, response):

print '--------------response'

return response

2)在test5/settings.py文件中,向MIDDLEWARE_CLASSES項(xiàng)中注冊(cè)笔诵。


3)修改booktest/views.py中視圖index返吻。

def index(request):

print '======index======'

return render(request,'booktest/index.html')

4)運(yùn)行服務(wù)器,命令行中效果如下圖:


3)刷新頁面乎婿,命令行中效果如下圖:


異常中間件

1)在booktest/middleware.py中定義兩個(gè)異常類如下:

class exp1:

def process_exception(self,request,exception):

print '--------------exp1'

class exp2:

def process_exception(self,request,exception):

print '--------------exp2'

2)在test5/settings.py文件中测僵,向MIDDLEWARE_CLASSES項(xiàng)中注冊(cè)。


3)修改booktest/views.py中視圖index谢翎。

def index(request):

print '======index======'

raise Exception('自定義異常')

return render(request,'booktest/index.html')

總結(jié):如果多個(gè)注冊(cè)的中間件類中都有process_exception的方法捍靠,則先注冊(cè)的后執(zhí)行。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末森逮,一起剝皮案震驚了整個(gè)濱河市榨婆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌褒侧,老刑警劉巖良风,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異闷供,居然都是意外死亡烟央,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門歪脏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疑俭,“玉大人,你說我怎么就攤上這事婿失〕В” “怎么了啄寡?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)哩照。 經(jīng)常有香客問我挺物,道長(zhǎng),這世上最難降的妖魔是什么葡秒? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任姻乓,我火速辦了婚禮嵌溢,結(jié)果婚禮上眯牧,老公的妹妹穿的比我還像新娘。我一直安慰自己赖草,他們只是感情好学少,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著秧骑,像睡著了一般版确。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乎折,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天绒疗,我揣著相機(jī)與錄音,去河邊找鬼骂澄。 笑死吓蘑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的坟冲。 我是一名探鬼主播磨镶,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼健提!你這毒婦竟也來了琳猫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤私痹,失蹤者是張志新(化名)和其女友劉穎脐嫂,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體紊遵,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡账千,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了癞蚕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蕊爵。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖桦山,靈堂內(nèi)的尸體忽然破棺而出攒射,到底是詐尸還是另有隱情醋旦,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布会放,位于F島的核電站饲齐,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏咧最。R本人自食惡果不足惜捂人,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望矢沿。 院中可真熱鬧滥搭,春花似錦、人聲如沸捣鲸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽栽惶。三九已至愁溜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間外厂,已是汗流浹背冕象。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留汁蝶,地道東北人渐扮。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像穿仪,于是被迫代替她去往敵國和親席爽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 中間件是一個(gè)鉤子框架啊片,它們可以介入Django 的請(qǐng)求和響應(yīng)處理過程只锻。它是一個(gè)輕量級(jí)、底層的“插件”系統(tǒng)紫谷,用于在全...
    低吟淺唱1990閱讀 514評(píng)論 0 0
  • Django 文檔協(xié)作翻譯小組人手緊缺齐饮,有興趣的朋友可以加入我們,完全公益性質(zhì)笤昨。交流群:467338606網(wǎng)站:h...
    布客飛龍閱讀 776評(píng)論 0 37
  • Refer to: www.threemeal.com/blog/12/ 中間件 中間件是一個(gè)鉤子框架祖驱,它們可以介...
    蘭山小亭閱讀 16,468評(píng)論 9 165
  • 1,定義 Django中的中間件是一個(gè)輕量級(jí)瞒窒、底層的插件系統(tǒng)捺僻,可以介入Django的請(qǐng)求和響應(yīng)處理過程,修改Dja...
    曉可加油閱讀 294評(píng)論 0 1
  • 知識(shí)點(diǎn) 概念 使用場(chǎng)景 中間件如何發(fā)生作用 自定義中間件 中間件概念 中間件是嵌入 django 的 reques...
    Spareribs閱讀 2,415評(píng)論 0 6