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

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:Django-中間件

柚子快報邀請碼778899分享:Django-中間件

http://yzkb.51969.com/

什么是中間件?

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

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

Django中的中間件是什么?

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

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配置項是一個列表,列表中是一個個字符串,這些字符串其實是一個個類,也就是一個 個中間件。

自定義中間件

????????中間件可以定義五個方法,分別是:(主要的是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或一個HttpResponse對象,如果是None,則繼續(xù)按照django定義的 規(guī)則向后繼續(xù)執(zhí)行,如果是HttpResponse對象,則直接將該對象返回給用戶。

自定義一個中間件示例

from django.utils.deprecation import MiddlewareMixin

class MD1(MiddlewareMixin):

def process_request(self,request):

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

process_request

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

多個中間件時,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配置項中注冊上述兩個自定義中間件:

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

]

此時,我們訪問一個視圖,會發(fā)現(xiàn)終端中打印如下內(nèi)容:

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

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

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

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

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

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

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

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

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

柚子快報邀請碼778899分享:Django-中間件

http://yzkb.51969.com/

參考文章

評論可見,查看隱藏內(nèi)容

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

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

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

發(fā)布評論

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

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄