django中间件

二、 中间件
a) 什么是中间件:中间件是一个类,影响全局。可以改变请求和响应。
b) 自定义中间件:
i. 创建中间件

  1. 自定义一个类 继承MiddlewareMixin
  2. 注册 :settings.py 中 MIDDLEWARE 列表中进行注册。
  3. 5个可以覆写的方法(根据需求来覆写即可)
    c) process_request 方法
    i. 执行时机:在 视图函数执行之前调用。 并且 request 对象和视图函数中的request对象是同一个。
    ii. 返回值:
  4. 如果返回None(也就是没有返回值)则请求放行,执行下一个中间件的process_request 方法。如果每一个中间件都放行,则执行视图函数。
  5. 如果返回HttpResonse 对象,则拦截不执行后面的中间件的process_request方法和视图函数。则将HttpResponse对象直接返回给浏览器。
    d) process_response方法
    i. 执行时机:在视图函数执行之后调用,并且必须返回HttpResponse对象。
    ii. 返回值:必须返回HttpResponse对象。
    e) process_view 方法。
    i. 执行时机:在process_request 之后, 视图函数执行之前执行。
  6. 参数:将视图函数对象,视图函数中的参数,都传递给process_view 方法了。
    ii. 返回值:
  7. 返回None :则继续执行后面中间的process_view方法。如果都放行则执行视图函数。
  8. 返回HttpResponse对象:执行最后的中间件的process_response方法。
    然后倒序执行其他中间件的process_response方法。
    f) process_exception 方法
    i. 执行时机:当视图函数有异常的时候,执行此方法。否则不执行。
    ii. 返回值:
  9. 返回None : 将异常抛给下一个中间件的process_exception,如果都不处理则抛给浏览器。
  10. 返回HttpResponse 对象:将对象返回给浏览器。
    g) 4个方法执行顺序
    i. Process_request --> process_view --> 视图函数(无异常)–>process_response
    h) 使用中间件控制用户访问权限:
    i. 思路:
  11. 首先获取url 路径部分。
  12. 然后将url路径部分和白名单中的路径进行比较,如果url路径在白名单中,放行。如果不在,判断是否携带session或者cookie ,如果携带则放行,否则拦截。
    例:
class MD1(MiddlewareMixin):
	def process_request(self,request):
		print('MD1...request...') #1
	def process_response(self, request, response):
		print('MD1...resonse...') #7
		print('MD1:' + str(id(response))) #8 #打印响应对象
		return response
class MD2(MiddlewareMixin):
	def process_request(self,request):
		print('MD2...request...') #2
	def process_response(self, request, response):
		print('MD2...resonse...') #5
		print('MD2:' + str(id(response))) #6 #打印响应对象
		return response

def index(request):
	print('视图函数...index...') #3
	print('视图函数:' + str(id(request))) #4
	return render(request, 'index.html')

返回、

MD1...request
MD2...request
视图函数...index...
视图函数:79237864
MD2...resonse...
MD2:79237864
MD1...resonse...
MD1:79237864
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值