电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

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

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

一、什么是Django中間件

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

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

二、Django中間件的定義規則

1、 自定義中間件的規則

(1)要繼承MIDDLEWAREMIXIN類

from django.utils.deprecation import MiddlewareMixin

(2)要重寫父類方法 

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

(1)process_request(self,request)

*主要方法。請求剛進來時,執行視圖函數之前調用。(無return)

1.中間件的process_request方法是在執行視圖函數之前執行的

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

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

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

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

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

(3)process_template_response(self,request,response) 

*很少用。執行了render()渲染方法后調用。(有return)

(4)process_exception(self,request,exception) 

執行視圖函數中遇到異常時調用。(無return)

*該方法有兩個參數:

一個是httpresponse對象

一個是視圖函數產生的exception對象

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

(5)process_response(self,request,response)  

主要方法。執行視圖函數結束之后有響應時調用。(有return)

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

(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’, # 自定義 在對應app內創建一個 my_middleware.py文件,然后定義類名為Middleware的中間件 ’app.my_middleware.Middleware’,]# 白名單路徑,不需要做登陸就能訪問的頁面WHITE_LIST = [’/login/’, ’/logout/’]

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

三、代碼實現

my_middleware.py

from django.utils.deprecation import MiddlewareMixin # 導入中間間模塊from django.shortcuts import redirect # 返回頁面模塊from middlewareDemo import settings # 導入白名單class Middleware(MiddlewareMixin): # 認證中間件 def process_request(self, request): ''' 請求來之前判斷是否已經登錄 :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): ''' 不管是何執行結果,都會返回相應的HttpResonse對象 :param request: :param response: :return: ''' print(’m1.process_response’) return response def process_exception(self, request, exception): ''' 出現異常才會被調用進行異常處理 :param request: :param exception: :return: ''' print(’m1.process_exception’)

四、中間件的使用場景

1.做IP限制

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

2.URL訪問過濾

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

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

3.緩存

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

4、CSRF

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

五、Django中間件與裝飾器的區別

1、Django 中間件:在視圖函數執行之前先去進行處理,在視圖函數執行之后再去進行收尾工作。不會區分是哪個視圖,所有的視圖統統一視同仁,都會執行之前進行處理或請求之后進行處理。

在Django創建的時候,Django默認會給我們加6個中間件。“比如session和csrf,在視圖函數執行前,我們就需要對它進行處理,可以使用裝飾器來做,也可以使用中間件來處理。”

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

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

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 时代北利离心机,实验室离心机,医用离心机,低速离心机DT5-2,美国SKC采样泵-上海京工实业有限公司 工业电炉,台车式电炉_厂家-淄博申华工业电炉有限公司 | 洛阳永磁工业大吊扇研发生产-工厂通风降温解决方案提供商-中实洛阳环境科技有限公司 | 3d可视化建模_三维展示_产品3d互动数字营销_三维动画制作_3D虚拟商城 【商迪3D】三维展示服务商 广东健伦体育发展有限公司-体育工程配套及销售运动器材的体育用品服务商 | 华中线缆有限公司-电缆厂|电缆厂家|电线电缆厂家 | 美的商用净水器_美的直饮机_一级代理经销商_Midea租赁价格-厂家反渗透滤芯-直饮水批发品牌售后 | 卡诺亚轻高定官网_卧室系统_整家定制_定制家居_高端定制_全屋定制加盟_定制家具加盟_定制衣柜加盟 | 分光色差仪,测色仪,反透射灯箱,爱色丽分光光度仪,美能达色差仪维修_苏州欣美和仪器有限公司 | 厚壁钢管-厚壁无缝钢管-小口径厚壁钢管-大口径厚壁钢管 - 聊城宽达钢管有限公司 | 大巴租车平台承接包车,通勤班车,巴士租赁业务 - 鸿鸣巴士 | 济南品牌包装设计公司_济南VI标志设计公司_山东锐尚文化传播 | 外贮压-柜式-悬挂式-七氟丙烷-灭火器-灭火系统-药剂-价格-厂家-IG541-混合气体-贮压-非贮压-超细干粉-自动-灭火装置-气体灭火设备-探火管灭火厂家-东莞汇建消防科技有限公司 | 发电机价格|发电机组价格|柴油发电机价格|柴油发电机组价格网 | 活性炭-蜂窝-椰壳-柱状-粉状活性炭-河南唐达净水材料有限公司 | 除甲醛公司-甲醛检测-广西雅居环境科技有限公司 | 西安标准厂房_陕西工业厂房_西咸新区独栋厂房_长信科技产业园官方网站 | 口臭的治疗方法,口臭怎么办,怎么除口臭,口臭的原因-口臭治疗网 | 济宁工业提升门|济宁电动防火门|济宁快速堆积门-济宁市统一电动门有限公司 | 折弯机-刨槽机-数控折弯机-数控刨槽机-数控折弯机厂家-深圳豐科机械有限公司 | 啤酒设备-小型啤酒设备-啤酒厂设备-济南中酿机械设备有限公司 | 直流电能表-充电桩电能表-导轨式电能表-智能电能表-浙江科为电气有限公司 | 等离子表面处理机-等离子表面活化机-真空等离子清洗机-深圳市东信高科自动化设备有限公司 | 茶叶百科网-茶叶知识与茶文化探讨分享平台 | 搪玻璃冷凝器_厂家-越宏化工设备 | 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 - 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 | 防水套管|柔性防水套管|伸缩器|伸缩接头|传力接头-河南伟创管道 防水套管_柔性防水套管_刚性防水套管-巩义市润达管道设备制造有限公司 | 北京签证代办_签证办理_商务签证_旅游签证_寰球签证网 | 深圳市万色印象美业有限公司| 探鸣起名网-品牌起名-英文商标起名-公司命名-企业取名包满意 | 企小优-企业数字化转型服务商_网络推广_网络推广公司 | 全自动包装秤_全自动上袋机_全自动套袋机_高位码垛机_全自动包装码垛系统生产线-三维汉界机器(山东)股份有限公司 | 消泡剂_水处理消泡剂_切削液消泡剂_涂料消泡剂_有机硅消泡剂_广州中万新材料生产厂家 | 罗茨真空机组,立式无油往复真空泵,2BV水环真空泵-力侨真空科技 | 粘度计NDJ-5S,粘度计NDJ-8S,越平水分测定仪-上海右一仪器有限公司 | ERP企业管理系统永久免费版_在线ERP系统_OA办公_云版软件官网 | 台式核磁共振仪,玻璃软化点测定仪,旋转高温粘度计,测温锥和测温块-上海麟文仪器 | 东莞ERP软件_广州云ERP_中山ERP_台湾工厂erp系统-广东顺景软件科技有限公司 | 法兰螺母 - 不锈钢螺母制造厂家 - 万千紧固件--螺母街 | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 安平县鑫川金属丝网制品有限公司,声屏障,高速声屏障,百叶孔声屏障,大弧形声屏障,凹凸穿孔声屏障,铁路声屏障,顶部弧形声屏障,玻璃钢吸音板 | 浙江红酒库-冰雕库-气调库-茶叶库安装-医药疫苗冷库-食品物流恒温恒湿车间-杭州领顺实业有限公司 | 精密光学实验平台-红外粉末压片机模具-天津博君 |