django自定义中间件

流程如下:

  1. 在app目录下创建middleware.py 文件
  2. 在py文件中导入中件件的基类
from django.utils.depracation import MiddlewareMixin
  1. 在类中根据功能需求,创建需求类,重新需求的方法
  2. 启用中间件,在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
  • 测试接口还是一样,定义一个返回首页的函数来测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值