国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Django教程筆記之中間件middleware詳解

2020-02-15 22:37:30
字體:
供稿:網(wǎng)友

中間件介紹

中間件顧名思義,是介于request與response處理之間的一道處理過程,相對(duì)比較輕量級(jí),并且在全局上改變django的輸入與輸出。因?yàn)楦淖兊氖侨郑孕枰?jǐn)慎實(shí)用,用不好會(huì)影響到性能。

每個(gè)中間件都會(huì)負(fù)責(zé)一個(gè)功能,例如,AuthenticationMiddleware,與sessions處理相關(guān)。

激活中間件

需要在settings.py配置文件中,配置MIDDLEWARE_CLASSES:

MIDDLEWARE_CLASSES = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',]

當(dāng)然你也可以不試用任何的中間件,這個(gè)可以設(shè)置為空。

中間件順序

一般我們我們從瀏覽器發(fā)出一個(gè)請(qǐng)求 Request,得到一個(gè)響應(yīng)后的內(nèi)容 HttpResponse ,這個(gè)請(qǐng)求傳遞到 Django的過程如下,process request 和 process response的執(zhí)行順序正好相反,如下圖所示:

也就是說,每一個(gè)請(qǐng)求都是先通過中間件中的 process_request 函數(shù),這個(gè)函數(shù)返回 None 或者 HttpResponse 對(duì)象,如果返回前者,繼續(xù)處理其它中間件,如果返回一個(gè) HttpResponse,就處理中止,返回到網(wǎng)頁上。
中間件不用繼承自任何類(可以繼承 object ),下面一個(gè)中間件大概的樣子:

class CommonMiddleware(object): def process_request(self, request): return None def process_response(self, request, response): return response

需要用到的幾個(gè)hook:

process_request() process_exception() (only if the view raised an exception) process_template_response() process_response()

常用的中間件組件:

1. Sessions

2. Authentication

3. CSRF Protection

4. GZipping Content

例如,比如我們要做一個(gè) 流量統(tǒng)計(jì)

class BlockedIpMiddleware(object): def process_request(self, request):   ...數(shù)據(jù)庫拿access值   access = access+1   ...存起來,類似這個(gè)原理  

這里的代碼的功能就是 簡(jiǎn)單的訪問一次加一次,把這個(gè)中間件的 Python 路徑寫到settings.py中

MIDDLEWARE_CLASSES = ( 'zjj.middleware.BlockedIpMiddleware', ...其它的中間件)

Django 會(huì)從 MIDDLEWARE_CLASSES 中按照從上到下的順序一個(gè)個(gè)執(zhí)行中間件中的 process_request 函數(shù),而其中 process_response 函數(shù)則是最前面的最后執(zhí)行。

二,再比如,我們?cè)诰W(wǎng)站放到服務(wù)器上正式運(yùn)行后,DEBUG改為了 False,這樣更安全,但是有時(shí)候發(fā)生錯(cuò)誤不能顯示錯(cuò)誤詳情頁面,有沒有辦法處理好這兩個(gè)事情呢?

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 汝城县| 天津市| 酒泉市| 双鸭山市| 南涧| 乐至县| 林甸县| 马山县| 九江市| 安西县| 延川县| 宁安市| 藁城市| 承德市| 岳普湖县| 买车| 遂宁市| 兴城市| 台中县| 邵阳县| 临沂市| 碌曲县| 柳河县| 丰顺县| 两当县| 卢湾区| 大余县| 荆州市| 姚安县| 墨竹工卡县| 宜兰县| 富平县| 东至县| 金堂县| 全椒县| 甘南县| 抚州市| 绍兴市| 岢岚县| 奉贤区| 大名县|