流程如下:
- 在app目录下创建middleware.py 文件
- 在py文件中导入中件件的基类
from django.utils.depracation import MiddlewareMixin
- 在类中根据功能需求,创建需求类,重新需求的方法
- 启用中间件,在settings中进行配置,MIDDLEWARE中注册中间件
app.middleware.中间件类名
详情如下:
- 创建中间件
from django.utils.deprecation import MiddlewareMixin
from django.http import HttpResponse
class Block(MiddlewareMixin):
EXCLUDE_IPS = []
def process_view(self, request, view_func, *view_args, **view_kwargs):
user_ip = request.META['REMOTE_ADDR']
# if user_ip.startswith("192.168.43.2"):
# 这一步是判断字符串以什么开头
if user_ip.startswith("192.168.1.1"):
return HttpResponse('该ip不可访问')
- 在settings中加入中间件,由于中件间有执行顺序,自定义中间件加入到最一个
MIDDLEWARE = [
'myapp.middleware.BlockedIPSMiddleware', #自定义中间件
]
- 使用中间件
- views视图函数中写入这个是为了测试
class IndexView(View):
def get(self,request):
return HttpResponse('首页')
在启动服务时需要加上域名
python manage.py runserver 192.168.1.13:8000
自己理解的含义:
---------怎样测试接口?
--------------因为在自定义中间件里 判断了 以192.168.1.1 开头,所以我以python manage.py runserver 192.168.1.13:8000启动服务后,页面展示的效果就是 中间件函数里的 该IP不可访问
装饰器实现中间件功能
# 使用装饰器实现
EXCLUDE_IPS = ["192.168.1.44", "192.168.1.62"]
def blocked_ips(func):
def wrapper(request, *view_args, **view_kwargs):
user_ip = request.META["REMOTE_ADDR"]
if user_ip in EXCLUDE_IPS:
return HttpResponse("<h1>该IP不可以访问</h1>")
else:
return func(request, *view_args, **view_kwargs)
return wrapper
- 测试接口还是一样,定义一个返回首页的函数来测试