前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django自定义中间件middleware

Django自定义中间件middleware

作者头像
kirin
发布2020-05-21 00:11:06
1.6K0
发布2020-05-21 00:11:06
举报
文章被收录于专栏:Kirin博客

我自己想做自定义中间件的想法起源是我想给我的api增加一个ip访问记录,以及访问次数统计的功能,

说干就干,然后就百度了一下,看了几篇文章,然后就动手试了试,中间件的话还是挺简单的,

1.首先在项目的个目录下新建一个文件夹,用来放自定义的中间件,

这里我在项目根目录下/建立了xmiddleware文件夹,然后在该文件夹中建立了middleware.py文件

./xmiddleware/middleware.py

2.一定要在setting.MIDDLEWARE  中添加你自己定义的中间件,不然是不会生效的,添加后记得加上逗号,分隔

3.我自己定义的中间件代码如下   # middleware.py

代码语言:javascript
复制
from django.utils.deprecation import MiddlewareMixin # 一定要导入
# 打印出客户端的ip
class Xmiddleware(MiddlewareMixin):
    def process_request(self,request): # 因为是继承自MiddlewareMixin 的 所以他里面的方法名不能改变
        # 自定义中间件逻辑开始
        if request.META.get('HTTP_X_FORWARDED_FOR'):
            ip = request.META.get("HTTP_X_FORWARDED_FOR") # 过滤掉nginx的方向代理,避免获取到的是本地的ip
        else:
            ip = request.META.get("REMOTE_ADDR")
        print("ip : ", ip)
        # 自定义中间件逻辑结束

4. setting.py中注册自己写好的中间件

代码语言:javascript
复制
MIDDLEWARE = [
    'xmiddleware.kaishimid.Xmiddleware', # 这是我自己定义的中间件,我放在第一了,避免他不执行
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

5.在浏览器中打开http://127.0.0.1:8000/

然后返回你的pycharm 终端就可以看到中间件打印出来的ip了

# ip : 127.0.0.1  这是我自己pc打开的地址

# ip : 192.168.2.113 这是我通过 python manage.py runserver 0.0.0.0:8080 方式开启所得到的客户端地址,

证明中间件逻辑是没有问题的,奥利给

以前的话我是自己给每一个视图加上装饰器来获取,这种做法一点都不优雅,甚至还有点蠢,

中间件的方式能够很好的解决这个问题,

中间件在你没有写views的情况下也是能够正常的执行的

在自定义中间件中加入相应的统计代码就可以实现我想要的功能啦,完美!

参考文章https://blog.csdn.net/xoofly/article/details/89419319

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/05/17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档