编写一个中间件

简介:

上次说到django的中间件,这次就来写一个。这次就是通过中间件来做一个类似于日志的记录。


一、创建一个中间件目录与中间件文件

    中间件目录是Middle,log.py是中间件文件

wKioL1lJ3CKwBuMfAAANjSryovs678.png

现在来看看log.py文件:

wKiom1lJ3IGRD6k0AACDpeM3Zkc696.png

也许写的比较low,就是想要记录一下访问项目的时间,ip,请求方式,请求url,返回的状态码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class  Row1(MiddlewareMixin):
     def  process_request( self ,request):
         if  request.META.has_key( 'HTTP_X_FORWARDED_FOR' ):
             ip  =  request.META[ 'HTTP_X_FORWARDED_FOR' ]
         else :
             ip  =  request.META[ 'REMOTE_ADDR' ]
         u  =  request.path_info
         m  =  request.method
         subfolder  =  time.strftime( "%Y%m%d" )
         e  =  str (time.strftime( '%Y-%m-%d %H:%M:%S' ,time.localtime(time.time())))
         path  =  str ( 'log/'  +  subfolder  + '.log' )
         f  =  open (path, 'a+' )
         f.write(  '[' + e  +  ']' + '\t' +  m  +  '\t' +  u  +  '\t' +  ip  + '\t' )
         f.close()
     def  process_response( self ,request,response):
         subfolder  =  time.strftime( "%Y%m%d" )
         path  =  str ( 'log/'  +  subfolder  +  '.log' )
         status  =  str (response.status_code)
         f  =  open (path,  'a+' )
         f.write(status  +  '\n' )
         f.close()
         return  response

当然,要创建这个log目录:

wKiom1lJ33XiPHZBAAAceR1PZkw913.png


二、将这个中间件加入到django里

    想要这个中间件生效,还需要在django的settings.py文件里加入这个中间件配置,在MIDDLEWARE里加入'Middle.log.Row1',

wKiom1lJ3h7Amm_9AAA7_iqkIsQ058.png


三、测试

访问网站,在log目录下就会生成以日期为命名的.log文件,文件内容为:

wKiom1lJ4BHgtCDuAABFwWmxXB0870.png


四、总结

通过上面,我们可以编写各种你需要的中间件,来更完善你的项目,同样也避免了在views.py文件里写过多的代码。比如访问限制、黑白名单等等。。



本文转自 sykmiao 51CTO博客,原文链接:http://blog.51cto.com/syklinux/1940457,如需转载请自行联系原作者

相关文章
|
缓存 Kubernetes 异构计算
使用TensorRT-LLM进行生产环境的部署指南
TensorRT-LLM是一个由Nvidia设计的开源框架,用于在生产环境中提高大型语言模型的性能。该框架是基于 TensorRT 深度学习编译框架来构建、编译并执行计算图,并借鉴了许多 FastTransformer 中高效的 Kernels 实现,并且可以利用 NCCL 完成设备之间的通讯。
1099 12
|
负载均衡 数据可视化 AI芯片
DeepSeek模型MOE结构代码详解
其实在DeepSeek-R1爆火之前,DeepSeek V2在我们行业就已经妇孺皆知了,它独特的MOE结构值得研究一下。这篇文章是基于 @ZOMI酱 的2个视频写的,这2个视频讲的很好,建议大家都学习一下:《MOE终于迎来可视化解读!傻瓜都能看懂MoE核心原理!》和《使用昇腾NPU手撕MoE单机版代码!没想到如此简单!》。
932 5
|
编解码 固态存储 容器
视频技术入门指南
你真的理解视频技术吗?什么是帧率、分辨率、码率?它们之间有什么关系?你知道“1080p”和“4K”中的“p”和“K”代表什么吗?如何描述视频质量?蓝光光盘(Blu-ray Disc)究竟是什么?H.264/AVC、H.265/HEVC、AV1 等编解码器有什么区别?苹果的 Apple ProRes 又有什么特殊用途?HDR 和杜比视界(Dolby Vision)是什么?为什么视频文件有.mp4、.mkv、.flv 等多种后缀?
3236 0
视频技术入门指南
|
机器学习/深度学习 PyTorch 语音技术
Pytorch迁移学习使用Resnet50进行模型训练预测猫狗二分类
深度学习在图像分类、目标检测、语音识别等领域取得了重大突破,但是随着网络层数的增加,梯度消失和梯度爆炸问题逐渐凸显。随着层数的增加,梯度信息在反向传播过程中逐渐变小,导致网络难以收敛。同时,梯度爆炸问题也会导致网络的参数更新过大,无法正常收敛。 为了解决这些问题,ResNet提出了一个创新的思路:引入残差块(Residual Block)。残差块的设计允许网络学习残差映射,从而减轻了梯度消失问题,使得网络更容易训练。
2981 0
|
安全 数据安全/隐私保护 微服务
微服务 Token 鉴权设计:一场守护系统安全的惊心动魄之战,你敢应战吗?
【8月更文挑战第29天】在微服务架构中,Token鉴权设计至关重要,它通过在客户端与服务器间传递包含用户身份和权限信息的Token来确保系统安全。合理的Token鉴权能有效防止非法访问,保护数据安全。设计时需考虑Token的有效期、刷新机制及加密算法等,以提升安全性。随着技术发展,持续优化鉴权机制对于满足复杂的安全需求至关重要。
555 0
|
JavaScript Java jenkins
如何利用CentOS7+docker+jenkins+gitee部署springboot+vue前后端项目(保姆教程)
如何利用CentOS7+docker+jenkins+gitee部署springboot+vue前后端项目(保姆教程)
1039 0
|
前端开发 索引 Python
技术心得:xpath、CSS定位方法
技术心得:xpath、CSS定位方法
611 0
|
SQL 安全 Java
Java中的代码审计与漏洞检测实践指南
Java中的代码审计与漏洞检测实践指南
|
NoSQL 架构师 网络协议
Redis系列-15.Redis的IO多路复用原理解析(上)
Redis系列-15.Redis的IO多路复用原理解析
941 1
|
Python
BackTrader 中文文档(七)(1)
BackTrader 中文文档(七)
562 0

热门文章

最新文章