日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Python Django中間件使用原理及流程分析

瀏覽:25日期:2022-07-21 13:50:01

一、什么是Django中間件

Django 中間件是用來處理Django的請求request和響應(yīng)response的框架級別的鉤子,它是一個輕量,低級別的插件系統(tǒng),用于全局范圍內(nèi)改變Django的輸入,輸出。每個中間件組件都負(fù)責(zé)做一些特定的功能。

說的直白一點是中間件就是幫我們程序員在視圖函數(shù)執(zhí)行之前和執(zhí)行之后都可以一些額外的操作,它是一個自定義的類,類中定義了幾個方法,Django框架會在請求的特定時間去執(zhí)行這些方法。

二、Django中間件的定義規(guī)則

1、 自定義中間件的規(guī)則

(1)要繼承MIDDLEWAREMIXIN類

from django.utils.deprecation import MiddlewareMixin

(2)要重寫父類方法 

父類的五個方法(主要process_request process_response)

(1)process_request(self,request)

*主要方法。請求剛進(jìn)來時,執(zhí)行視圖函數(shù)之前調(diào)用。(無return)

1.中間件的process_request方法是在執(zhí)行視圖函數(shù)之前執(zhí)行的

2.當(dāng)配置中間件時,會按照MIDDLEWARE的注冊順序,也就是列表的索引值,從前到后依次執(zhí)行的。

3.不同中間件之間傳遞的request都是同一個對象。

(2)process_view(self,request,view_func,view_args,view_kwargs)

*URL路由匹配成功后,執(zhí)行視圖函數(shù)之前調(diào)用,拿到視圖函數(shù)對象,及其所有參數(shù)。(無return) 

’’’process_view(self, request, view_func, view_args, view_kwargs)request是HttpRequest對象。view_func是Django即將使用的視圖函數(shù)。 (它是實際的函數(shù)對象,而不是函數(shù)的名稱作為字符串。)view_args是將傳遞給視圖的位置參數(shù)的列表.view_kwargs是將傳遞給視圖的關(guān)鍵字參數(shù)的字典。 view_args和view_kwargs都不包含第一個視圖參數(shù)(request)。’’’

(3)process_template_response(self,request,response) 

*很少用。執(zhí)行了render()渲染方法后調(diào)用。(有return)

(4)process_exception(self,request,exception) 

執(zhí)行視圖函數(shù)中遇到異常時調(diào)用。(無return)

*該方法有兩個參數(shù):

一個是httpresponse對象

一個是視圖函數(shù)產(chǎn)生的exception對象

這個函數(shù)只有在視圖函數(shù)拋出異常才可以執(zhí)行,它返回none或者h(yuǎn)ttpresponse對象,如果是httpresponse對象,django將調(diào)用模板和中間件中的process_reponse方法,并將返回給瀏覽器,否則默認(rèn)處理異常,如果返回none,則交給下一個中間件的process_exception方法來處理執(zhí)行,它的執(zhí)行順序也是按照中間件注冊順序的倒序執(zhí)行。

(5)process_response(self,request,response)  

主要方法。執(zhí)行視圖函數(shù)結(jié)束之后有響應(yīng)時調(diào)用。(有return)

返回值可以是一個NONE,或者HttpResponse對象,如果是none,繼續(xù)按照django定義的向下執(zhí)行,交給下個中間件處理,如果返回是Httpresponse對象,django將不執(zhí)行視圖函數(shù),則直接將該對象返回給用戶。

(3)將自定義中間件類添加到setting.py文件中的MIDDLEWARE配置項里

setting.py

MIDDLEWARE = [ ’django.middleware.security.SecurityMiddleware’, ’django.contrib.sessions.middleware.SessionMiddleware’, ’django.middleware.common.CommonMiddleware’, ’django.middleware.csrf.CsrfViewMiddleware’, ’django.contrib.auth.middleware.AuthenticationMiddleware’, ’django.contrib.messages.middleware.MessageMiddleware’, ’django.middleware.clickjacking.XFrameOptionsMiddleware’, # 自定義 在對應(yīng)app內(nèi)創(chuàng)建一個 my_middleware.py文件,然后定義類名為Middleware的中間件 ’app.my_middleware.Middleware’,]# 白名單路徑,不需要做登陸就能訪問的頁面WHITE_LIST = [’/login/’, ’/logout/’]

MIDDLEWARE是一個列表,列表中是一個個字符串,這些字符串其實是類,也就是中間件。

三、代碼實現(xiàn)

my_middleware.py

from django.utils.deprecation import MiddlewareMixin # 導(dǎo)入中間間模塊from django.shortcuts import redirect # 返回頁面模塊from middlewareDemo import settings # 導(dǎo)入白名單class Middleware(MiddlewareMixin): # 認(rèn)證中間件 def process_request(self, request): ''' 請求來之前判斷是否已經(jīng)登錄 :param request: :return: ''' white_list = settings.WHITE_LIST if request.path in white_list: return None # 如果是白名單的路徑,直接跳過 if not request.user.is_authenticated: # 獲取用戶是否登陸 return redirect(’/login/’) def process_response(self, request, response): ''' 不管是何執(zhí)行結(jié)果,都會返回相應(yīng)的HttpResonse對象 :param request: :param response: :return: ''' print(’m1.process_response’) return response def process_exception(self, request, exception): ''' 出現(xiàn)異常才會被調(diào)用進(jìn)行異常處理 :param request: :param exception: :return: ''' print(’m1.process_exception’)

四、中間件的使用場景

1.做IP限制

放在中間件類的列表中,阻止某些ip訪問;

2.URL訪問過濾

如果用戶訪問的是logo視圖(放過)

如果訪問其他視圖,需要檢測是否已經(jīng)有session,已經(jīng)有了放行,如果沒有返回login,這樣就省的在多個視圖函數(shù)上寫裝飾器了!

3.緩存

客戶端請求來了,中間件去緩存看看有沒有數(shù)據(jù),有直接返回給用戶,沒有再去邏輯層執(zhí)行視圖函數(shù)

4、CSRF

Django項目中默認(rèn)啟用了csrf保護(hù),每次請求時通過CSRF中間件檢查請求中是否有正確token值

五、Django中間件與裝飾器的區(qū)別

1、Django 中間件:在視圖函數(shù)執(zhí)行之前先去進(jìn)行處理,在視圖函數(shù)執(zhí)行之后再去進(jìn)行收尾工作。不會區(qū)分是哪個視圖,所有的視圖統(tǒng)統(tǒng)一視同仁,都會執(zhí)行之前進(jìn)行處理或請求之后進(jìn)行處理。

在Django創(chuàng)建的時候,Django默認(rèn)會給我們加6個中間件。“比如session和csrf,在視圖函數(shù)執(zhí)行前,我們就需要對它進(jìn)行處理,可以使用裝飾器來做,也可以使用中間件來處理。”

2、裝飾器:主要是作用域問題。如果給視圖函數(shù)上面添加裝飾器,它能夠保證這個視圖的方法在執(zhí)行之前或執(zhí)行之后被執(zhí)行。但是它僅僅適用于哪些視圖添加裝飾器,那些視圖會有這些作用。

如果是做一個普遍的處理,不去區(qū)分視圖的話,就用middleware避免編寫重復(fù)功能的代碼,本質(zhì)上就是一個自定義類,類中定義了幾個方法,Django框架會在請求的特定的時間去執(zhí)行這些方法。

可以用于登錄時的黑名單驗證。

如果需要對特殊視圖進(jìn)行處理,可以使用裝飾器。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
老司机精品视频网| 久久一区视频| 国产成人久久精品一区二区三区| 亚洲精品影视| 国产亚洲一区在线| 伊人久久在线| 97精品国产一区二区三区| 免费在线日韩av| 国产精品巨作av| 国产日韩免费| 国产精品久久亚洲不卡| 亚洲三区欧美一区国产二区| 激情综合网五月| 女同性一区二区三区人了人一| 欧美精品高清| 国产suv精品一区二区四区视频| 成人一区而且| 在线成人直播| 午夜一区在线| 日韩在线黄色| 在线精品亚洲| 亚洲免费观看高清完整版在线观| 亚洲精品伦理| 日韩激情av在线| 精品国内亚洲2022精品成人| 国产中文欧美日韩在线| 久久人人97超碰国产公开结果| 欧美 日韩 国产一区二区在线视频| 欧美a级一区| 911亚洲精品| 久久精品福利| 亚洲主播在线| 国产激情一区| 亚洲一区二区成人| 国产精品极品在线观看| 日本va欧美va精品发布| 国产精品nxnn| 女生影院久久| 99国内精品| 麻豆久久久久久| 日韩欧美一区免费| 亚洲欧美日韩国产一区| 日韩精品亚洲一区二区三区免费| 国产亚洲字幕| 99精品综合| 日韩制服丝袜先锋影音| 国产精品nxnn| 蜜臀av亚洲一区中文字幕| 老牛国内精品亚洲成av人片 | 视频精品一区| 亚洲女同av| 欧美一级网站| 视频一区国产视频| 国产成人精品免费视| 久热re这里精品视频在线6| 精品一区视频| 日韩三级一区| 国产亚洲一级| 国产一区清纯| 欧美激情另类| 精品一区二区三区的国产在线观看| 亚洲一二三区视频| 超碰超碰人人人人精品| 国产日韩视频在线| 亚洲欧美网站在线观看| 国产农村妇女精品一二区| 久久精品123| 日韩一区二区在线免费| 日本欧美大码aⅴ在线播放| 亚洲精品乱码日韩| 亚洲精品福利| 蜜臀av在线播放一区二区三区| 黄色亚洲免费| 国产一区日韩一区| 精品一区免费| 欧美粗暴jizz性欧美20| 美女久久久久| 日韩久久精品网| 午夜久久中文| 99精品视频在线| 亚洲精品88| 婷婷色综合网| 蜜桃久久av一区| 青青草精品视频| 国产精品啊v在线| 国产精品nxnn| 日韩中文在线电影| 亚洲国产影院| 亚洲丝袜美腿一区| 国产精品久久久久久久久久白浆 | 国产九九精品| 免费一级欧美片在线观看网站| 精品视频一区二区三区四区五区| 成午夜精品一区二区三区软件| 色吊丝一区二区| 鲁大师成人一区二区三区| 美女精品在线| 免费看久久久| 在线精品视频在线观看高清| 日韩三区四区| 蜜臀久久精品| 日韩一区二区三区免费视频| 久久久精品国产**网站| 久久久久免费av| 久久狠狠亚洲综合| 日韩精品久久久久久久电影99爱| 亚洲欧美视频一区二区三区| 国产精品www.| 五月婷婷亚洲| 免费在线日韩av| 男女男精品网站| 精品免费视频| 男女激情视频一区| 日韩综合精品| 国产精品日韩精品中文字幕| 免费av一区| 91亚洲成人| 国产精品亚洲综合在线观看| 伊人精品一区| 美女久久99| 日韩欧美高清一区二区三区| 免费看av不卡| 国产精品一区二区美女视频免费看| 亚洲经典在线| 亚洲精品国产嫩草在线观看| 国产欧美自拍| 中文精品在线| 伊人影院久久| 亚洲午夜一级| 日韩国产专区| 热三久草你在线| 97在线精品| 久久电影tv| 国产中文欧美日韩在线| 日韩高清欧美激情| 中文一区一区三区免费在线观 | 国产午夜久久av| 亚洲天堂av资源在线观看| 久久国产成人| 亚洲综合精品| 亚洲视频电影在线| 蜜桃视频一区二区| 日本欧美大码aⅴ在线播放| 综合激情在线| 日本不卡视频在线观看| 日本成人手机在线| 国产欧美高清视频在线| 麻豆视频久久| 国产精品成久久久久| 国产精品一卡| 国产高潮在线| 亚洲夜间福利| 丝袜美腿成人在线| 亚洲精品乱码日韩| 国产精品网在线观看| 麻豆视频一区二区| 天堂中文av在线资源库| 狠狠干综合网| 青青草国产成人99久久| 国内一区二区三区| 亚洲欧美伊人| 91大神在线观看线路一区| 久久99国产精品视频| 91高清一区| 亚洲一区二区日韩| 精品免费视频| 亚洲免费在线| 伊人久久视频| 国产日韩视频| 婷婷综合社区| 久久不卡国产精品一区二区| 欧美亚洲精品在线| 国产精品久久免费视频| 午夜av一区| 精品视频在线你懂得| 亚洲欧美成人综合| 欧美久久天堂| 国产精品xxx在线观看| 欧美成人高清| 国产精品一级在线观看| 好看不卡的中文字幕| 美腿丝袜在线亚洲一区| 日本精品影院| 都市激情国产精品| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 国产精品成人**免费视频| 视频在线观看一区二区三区| 99re国产精品| 日本欧美在线| 六月丁香综合在线视频| 日本在线啊啊| 黄色av一区| 91精品国产一区二区在线观看| 日韩精品一区二区三区中文在线| 日韩高清一区在线| 国产一区调教| 亚洲二区三区不卡| 日韩av中文在线观看| 国产66精品| 99riav国产精品|