日志中间件
settings.py 文件设置
中间件的引入一般放在settings.py 文件中的 MIDDLEWARE 中, 日志中间件也是从这里引入放进去。
配置两个字段,后面自定义middleware文件会使用到。
API_LOG_METHODS api 日志请求方法 API_LOG_ENABLE 是否开启api 日志记录
自定义middleware文件解析
在上面截图中可以看到权限中间件是放在了vadmin.op_drf.middleware.ApiLoggingMiddleware 里面 。去到对应的 middleware 文件中,看中间件写的一些内容。
从图可知,ApiLoggingMiddleware 继承于MiddlewareMixin, 然后例行的自定义实现了中间件中常用的方法 process_request, process_view, process_response。 然后还有两个私有的类方法, handle_request 以及 handle_response,这两个方法主要是对请求的信息以及返回的信息做加工处理。
process_request: 请求进来前的处理
process_view: 请求进入到视图处理前的处理
process_response: 请求处理完后的记录
因为这是对日志进行记录,对于request, response 以及 view都是要进行处理记录的。
对 ApiLoggingMiddleware这个类的代码进行分析
- 初始化分析 获取 settings.py 文件中设置的两个字段的值,后续会根据这两个字段的值进行下一步的操作。
2. process_request分析
从图中可以看到,process_request直接调用了 handle_request这一个私有化方法。
- handle_request方法分析
由图可知,这个方法里面,通过调用项目中的Request工具类(utils/request_util.py),分别获取到请求的IP信息,请求的参数信息,请求的URL信息,然后记录到日志中。
- process_view分析
这一块初始看代码其实是有点懵的,但是按照正常理解,view 视图是对数据逻辑的处理,会涉及的model 的查询相关操作,通过反向的数据model映射,获取到对应的model 的 verbose_name
- process_response分析
从图的代码可以看出,当api日志记录是开启的时候,记录的api 请求方式在对应的允许的范围里,会调用handle_response 对对应的request数据,response数据进行处理。
- handle_response方法分析
这个方法会对请求数据request_data进行获取,并且密码会进行对应的替换
然后也会对返回数据response_data进行获取。
然后会把相关的数据进行整合,保存到日志记录表中。