Django中间件技术
怎么理解中间件呢,其实如果你使用过java和数据库你就知道,中间件技术是两个模块中间的桥梁,就好比两块大陆之间的一座桥梁
如果需要详细了解中间件技术可以查看此文档
百度中间件技术
- java中间件技术 jdbc
- oracle中间件技术 odbc
今天我们要讲的是python中间件技术,首先给大家画个图
怎么理解这张图呢,其实我们在python的django这个模块中的中间件就是相当于过滤器一样,过滤相关信息,例如对不合理的IP地址进行禁止。
接下来我们来具体实现这个中间件技术
首先我们在app下面创建一个py文件, 这个py文件名字可以随便取,我这里是mymiddleware.py文件
from django.http import HttpResponse
from django.utils import deprecation
class BlockIPSMiddleware(deprecation.MiddlewareMixin):
'''中间件'''
EXCLUDE_IPS = ['192.168.60.26', '127.0.0.1']
def process_view(self, request, view_func, *view_args, **view_kwargvs):
'''在调用试图之前会调用这个函数'''
user_ip = request.META['REMOTE_ADDR'] # 获取请求的IP地址
print(user_ip)
if user_ip in self.EXCLUDE_IPS:
return HttpResponse('<h1>你被禁止访问了</h1>')
我们在创建这个类的时候继承系统自带的这个系统类**deprecation.MiddlewareMixin
**
- EXCLUDE_IPS 是一个集合
- process_view是固定的方法名称
- request.META[‘REMOTE_ADDR’]是拿到浏览器访问服务器的时候浏览器的地址
也就是说在浏览器访问试图之前,会先调用这个函数,但是到这里还没有完成,还有最后一步
注册
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',
# 这个是自定义的中间件技术,上面是系统自带的中间件技术
'booktest.mymiddleware.BlockIPSMiddleware',
]
到这里完整的流程就算结束了
扩展一点
在继承deprecation.MiddlewareMixin这个类的时候,我们需要注意的是,这个类下面是有四个接口需要我们注意的
# 本次将要执行的view函数被调用前调用本函数
def process_view(self, request, view_func, *view_args, **view_kwargvs):
pass
# 请求到来的时候调用
def process_request(self,request):
pass
# 在执行完本view函数准备将响应发到客户端前被执行
def process_response(self,request,response):
pass
#view函数在抛出异常的死后该函数被调用,得到的exception参数是实际上抛出的异常实例
def process_exception(self,request,exception):
pass
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)