欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)邀請(qǐng)碼778899分享:Django-中間件

柚子快報(bào)邀請(qǐng)碼778899分享:Django-中間件

http://yzkb.51969.com/

什么是中間件?

????????官方的說(shuō)法:中間件是一個(gè)用來(lái)處理Django的請(qǐng)求和響應(yīng)的框架級(jí)別的鉤子。它是一個(gè)輕量、低級(jí)別 的插件系統(tǒng),用于在全局范圍內(nèi)改變Django的輸入和輸出。每個(gè)中間件組件都負(fù)責(zé)做一些特定的功 能。

????????但是由于其影響的是全局,所以需要謹(jǐn)慎使用,使用不當(dāng)會(huì)影響性能。 說(shuō)的直白一點(diǎn)中間件是幫助我們?cè)谝晥D函數(shù)執(zhí)行之前和執(zhí)行之后都可以做一些額外的操作,它本質(zhì)上 就是一個(gè)自定義類(lèi),類(lèi)中定義了幾個(gè)方法,Django框架會(huì)在處理請(qǐng)求的特定的時(shí)間去執(zhí)行這些方法。 我們一直都在使用中間件,只是沒(méi)有注意到而已,打開(kāi)Django項(xiàng)目的Settings.py文件,看到下圖的 MIDDLEWARE配置項(xiàng)。

Django中的中間件是什么?

????????是一個(gè)python類(lèi),用來(lái)在全局范圍內(nèi)處理請(qǐng)求和響應(yīng)的一個(gè)鉤子

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",

"corsheaders.middleware.CorsMiddleware", # 解決同源策略中間件

]

?????????MIDDLEWARE配置項(xiàng)是一個(gè)列表,列表中是一個(gè)個(gè)字符串,這些字符串其實(shí)是一個(gè)個(gè)類(lèi),也就是一個(gè) 個(gè)中間件。

自定義中間件

????????中間件可以定義五個(gè)方法,分別是:(主要的是process_request和process_response)

????????process_request(self,request)

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

????????process_template_response(self,request,response)

????????process_exception(self, request, exception)

????????process_response(self, request, response)

以上方法的返回值可以是None或一個(gè)HttpResponse對(duì)象,如果是None,則繼續(xù)按照django定義的 規(guī)則向后繼續(xù)執(zhí)行,如果是HttpResponse對(duì)象,則直接將該對(duì)象返回給用戶(hù)。

自定義一個(gè)中間件示例

from django.utils.deprecation import MiddlewareMixin

class MD1(MiddlewareMixin):

def process_request(self,request):

print('這是MD1中的process_request方法')

process_request

????????process_request有一個(gè)參數(shù),就是request,這個(gè)request和視圖函數(shù)中的request是一樣的。 它的返回值可以是None也可以是HttpResponse對(duì)象。返回值是None的話,按正常流程繼續(xù)走,交 給下一個(gè)中間件處理,如果是HttpResponse對(duì)象,Django將不執(zhí)行視圖函數(shù),而將響應(yīng)對(duì)象返回給 瀏覽器。

多個(gè)中間件時(shí),Django執(zhí)行process_request方法。

from django.utils.deprecation import MiddlewareMixin

class MD1(MiddlewareMixin):

def process_request(self, request):

print("MD1里面的 process_request")

class MD2(MiddlewareMixin):

def process_request(self, request):

print("MD2里面的 process_request")

# 在settings.py的MIDDLEWARE配置項(xiàng)中注冊(cè)上述兩個(gè)自定義中間件:

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',

'middlewares.MD1', # 自定義中間件MD1

'middlewares.MD2' # 自定義中間件MD2

]

此時(shí),我們?cè)L問(wèn)一個(gè)視圖,會(huì)發(fā)現(xiàn)終端中打印如下內(nèi)容:

?????????MD1里面的 process_request

?????????MD2里面的 process_requestapp01 中的 index視圖

把MD1和MD2的位置調(diào)換一下,再訪問(wèn)一個(gè)視圖,會(huì)發(fā)現(xiàn)終端中打印的內(nèi)容如下:

????????MD2里面的 process_request

????????MD1里面的 process_requestapp01 中的 index視圖

????????看結(jié)果我們知道:視圖函數(shù)還是最后執(zhí)行的,MD2比MD1先執(zhí)行自己的process_request方法。 在打印一下兩個(gè)自定義中間件中process_request方法中的request參數(shù),會(huì)發(fā)現(xiàn)它們是同一個(gè)對(duì)象。 由此總結(jié)一下:

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

????????當(dāng)配置多個(gè)中間件時(shí),會(huì)按照MIDDLEWARE中的注冊(cè)順序,也就是列表的索引值,從前到后依次執(zhí)行的。

????????不同中間件之間傳遞的request都是同一個(gè)對(duì)象

柚子快報(bào)邀請(qǐng)碼778899分享:Django-中間件

http://yzkb.51969.com/

參考文章

評(píng)論可見(jiàn),查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19595584.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問(wèn)

文章目錄