Django实战-访问日志统计中间件

  • 2019 年 10 月 4 日
  • 筆記

Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。

当 Django 处理一个 Request 的过程是首先通过中间件,然后再通过默认的 URL 方式进行。可以在 Middleware 这个地方把所有 Request 拦截住,用自定义的方式完成处理以后直接返回 Response。

在django项目的settings模块中,有一个 MIDDLEWARE_CLASSES 变量,其中每一个元素就是一个中间件。

一、配置日志文件

通过上一小节的了解,知道 django 如何配置 log 日志信息——Django实战-日志

二、统计中间件

import time  import logging  from django.conf import settings
# 加载日志信息  logger = logging.getLogger("statistics")  logger2 = logging.getLogger("django")
class StatisticsMiddleware:      # 初始化      def __init__(self, get_response):          self.get_response = get_response          logger2.info("Build StatisticsMiddleware.")        # 统计请求时间      # __call__ 实例对象也将成为一个可调用对象      def __call__(self, request):          tick = time.time()          response = self.get_response(request)          # 路径          path = request.path          # 完整路径          full_path = request.get_full_path()          tock = time.time()          cost = tock - tick          content_list = []          content_list.append("now=[%d]" % tock)          content_list.append("path=[%s]" % path)          content_list.append("full_path=[%s]" % full_path)          # 浮点数 保留小数点后6位          content_list.append("cost=[%.6f]" % cost)          # 变成字符串          content = settings.STATISTICS_SPLIT_FLAG.join(content_list)          # 保存在日志文件          logger.info(content)          return response