第十章:中间件实现

第一节:中间件简介

中间件的作用:
1、做统计
2、控制黑名单和白名单
3、反爬(redis)
4、界面友好化(捕获异常)等

部份概念

1、OOP 与 AOP

OOP叫面向对象编程(object-oriented(导航)-programming)
AOP又叫面向切面编程或中间件(Aspect-oriented(导航)-programming )

2、切点

切点,又叫“勾子”。切点允许我们动态地在原有逻缉中插入一部分代码
在不修改原有代码的情况下,动态注入一部分代码
默认情况,不中断传播,切点会自动愈合(自动执行原有逻缉)
如果我们执行了中断操作(return 或 raise),没接上,会值到和序结尾

3、中间件的制作流程

**
1、在工程目录下创建mdiileware目录
2、继承MiddleWareMixin
3、覆写切点方法,实现自己想要的功能
4、在settings.py内进行注册**

框架内置的切点

中间件代码参考
切点部位相关代码说明
__ init__()没有参数,服务器响应第一个请求的时候自动调用,用户确定是否启用该中间件
请求时process_request(self,request)在执行视图前被调用,每个请求上都会调用;不返回或返回HttpResponse对象
调用视图前process_view(self,request,view_func,view_args,view_kwargs)调用视图之前执行,每个请求都会调用;不返回或返回HttpResponse对象
模板渲染后process_template_response(self,request,response)在视图刚好执行完后进行调用,每个请求都会调用;不返回或返回HttpResponse对象
返回前process_response(self,request,response)所有响应返回浏览器之前调用,每个请求都会调用;不返回或返回HttpResponse对象;
process_exception(self,request,exception)当视图抛出异常时调用;不返回或返回HttpResponse对象
中间件范本代码
# 继承框架中间件  
from django.shortcuts import redirect 
from django.utils.deprecation import MiddlewareMixin 
  
class MyappMiddleware(MiddlewareMixin):          
	# 下钩子于所有路由被交给路由表之前
	def process_request(self, request):         
		print(">>>>>>>>>> process_request", request)      
	
	# 下钩子于所有路由请求被交给视图函数之前      
	def process_view(self, request, view_func, view_args, view_kwargs):         
		print(">>>>>>>>>> process_view", request, view_func, view_args, view_kwargs)      

	# 理论上下钩子于所有路由请求的模板被渲染完成以后,实测无法回调      
	def process_template_response(self, request, response):         
		print(">>>>>>>>>> process_template_response", request, response)          
		return response      

	# 下钩子于所有路由的响应被返回之前      
	def process_response(self, request, response):         
		print(">>>>>>>>>> process_response", request, response)          
		return response 
		     
	# 统一处理所有异常,当前任何异常都重返主页     
	def process_exception(self, request, exception):         
		print(">>>>>>>>>> process_exception", request, exception)         
		return redirect('/') 

第二节:搭建工程

1、项目目标

1、黑名单用户访问任何页面都重定向到指定网页
2、福利页、抽奖页必须登录才能查看
3、福利页给VIP用户显示福利,给一般用户显示普通福利
4、发生任何异常都跳转到指定网页

2、前期准备

1、项目工程准备

参考文档第一章:hello,DJgo第三节:创建工程项目与整合TV
在这里插入图片描述
运行结果:
在这里插入图片描述
2、其他页面准备
在这里插入图片描述
在这里插入图片描述

第三节:中间件实现

搭建中间件框架

1、在工程目录下创建存放中间件目录

在这里插入图片描述

2、继承MiddleWareMixin

在这里插入图片描述

3、覆写切点方法,实现自我功能
# myMiddleware.py 中

from django.utils.deprecation import MiddlewareMixin

# 配置自定义中间件(继承于MiddlewareMixin),被运行时打印参数列表
class MyappMiddleWare(MiddlewareMixin):
    def __init__(self,get_response=None):
        print("===============> middleware的__init__已经初始化了 ")

    #def process_request(self,request):
        #print("===============>  process_request 被运行了 ",request)

    def process_view(self,request,view_func,view_args,view_kwargs):
        print("===============>  process_view 被运行了 ",request,view_func,view_args,view_kwargs)

    def process_template_response(self,request,response):
        print("===============>  process_template_response 被运行了 ",request,response)

    def process_response(self,request,response):
        print("===============>  process_response 被运行了 ",request,response)
        return response

    def process_exception(self,request,exception):
        print("===============>  process_exception 被运行了 ",request,exception)
4、在settings.py内进行注册

在这里插入图片描述
运行结果:
在这里插入图片描述

例:黑名单用户访问

1、创建不可访问的页面

在这里插入图片描述

2、定义黑名单IP地址

在这里插入图片描述

3、定义请求中间键函数
# myMiddleware.py 中

from django.shortcuts import render
from django.utils.deprecation import MiddlewareMixin
from HelloMiddleWare.settings import BLACK_LIST

# 配置自定义中间件(继承于MiddlewareMixin),被运行时打印参数列表
class MyappMiddleWare(MiddlewareMixin):
    def __init__(self,get_response=None):
        super(MyappMiddleWare,self).__init__()
        print("===============> middleware的__init__已经初始化了 ")

    def process_request(self,request):
        # 获取访问者的META中的IP,并打印
        clientIp = request.META['REMOTE_ADDR']
        print("===============>  process_request 被运行了 ",request,clientIp)
        # 返回不可访问的网页给黑名单
        if clientIp in BLACK_LIST:
            return render(request,'fuckoff.html')

黑名单访问结果:
在这里插入图片描述

例:登录进入福利页

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值