刨析django----中间件

中间件

轻量级的插件系统,可以全局改变django的输入(请求)、输出(响应)。
在这里插入图片描述
中间件先执行,然后执行装饰器+视图
/carts/<str:user>/cart, 匹配可变的用户名,然后以位置参数传给视图
在这里插入图片描述

具体实现

  1. 根目录,添加一个包----middleware
    __init__.py
    mymiddleware.py

  2. mymiddleware.py 中定义 ----中间件类

from django.utils.deprecation import MiddlewareMixin
class MMW(MiddlewareMixin):
	
	def process_request(self,request):
		#进入路由之前处理请求
		
		#禁止ip_list中的IP访问
		cur_ip = request.META.get("REMOTE_ADDR")
		if cur_ip in ip_list:
			return HttpResponse("当前ip 无法访问")
		else:
			return None   #可以走到路由

	def process_view(self,request,callback,callback_args,callback_kwargs):
		#callback,对应的视图函数
		#进入视图之前,处理请求
		s = request.session.get("username")
		c = request.COOKIES.get("username")
		# 判断用户是否登录
		if s or c :
			return None   #继续走到视图
		else:
			#return redirect("/user/login/")
			return HttpResponse("用户未登录")
	def process_response(self,request,response):
		#处理所有的响应
		print("处理所有的响应")
		return response/HttpResponse

	def process_exception(self,request,exception):
		#处理所有的视图异常
		print("处理所有的视图的异常")
		return HttpResponse("服务端异常")

	def process_template_response(self,request,response):
		print("处理模板响应")
		#视图函数返回的响应对象具有render方法时,调用
		#返回一个实现render方法的响应对象
		return render(request,"index.html")
			
  1. 注册中间件
    settings.py>MIDDLEWARE=[
    xxxxxx
    “middleware.mymiddleware.MMW”,
    ]

  2. 一个中间件,就是一个类
    在进入视图之前,中间件按照 注 册 顺 序 注册顺序 执行
    出视图后,按照 相 反 顺 序 相反顺序 执行

每次服务启动,
中 间 件 实 例 化 一 次 , 后 续 一 直 使 用 中间件实例化一次,后续一直使用 使

实战

路由:/test/middleware
视图:test_mw_view

def test_mw_view(request,*args,**kwargs):
	print(args)
	print(kwargs)
	return HttpResponse("xxxx")

中间件:
只允许IP-127.0.0.1 访问 /test/middleware五次,五次之后拒绝响应

项目代码
提取码:m2e6

中间件场景

  1. IP访问频率限制,如每分钟不能超过20次
  2. URL访问限制
    若用户访问的是login视图,则放行,否则检查是否登录
  3. 返回缓存数据
    查看服务端页面是否缓存,有则返回缓存页面,无再进入视图,–渲染页面—放入缓存

 
 
 
上一篇:刨析django----浏览器缓存     下一篇:刨析django----分页

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

laufing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值