python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > django自定义中间件全链路

Django自定义中间件实现全链路操作日志记录

作者:小王子1024

在 Django 中,中间件(Middleware)是一组轻量级、底层的插件系统,用于全局地改变 Django 的输入和输出,本文给大家介绍Django自定义中间件实现全链路操作日志记录,感兴趣的朋友跟随小编一起看看吧

一、中间件

介绍

在 Django 中,中间件(Middleware)是一组轻量级、底层的插件系统,用于全局地改变 Django 的输入和输出。中间件可以在请求被处理之前和响应返回之前执行代码,从而实现各种功能,例如跨域资源共享(CORS)、用户认证、日志记录等。

激活中间件

若要激活中间件,需要添加到settings.MIDDLEWARE

MIDDLEWARE = [
    "corsheaders.middleware.CorsMiddleware",  # CORS跨域支持
    "django.middleware.security.SecurityMiddleware",
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.middleware.locale.LocaleMiddleware",  # I18N多语言支持,注意放置顺序
    "django.middleware.common.CommonMiddleware",
    "django.middleware.csrf.CsrfViewMiddleware",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
    # "myapp_system.operate_log.services.OperateLogMiddleware",  # 操作日志开关:如果数据库磁盘IO性能一般,建议关闭
]

生命周期

中间件生命周期

内置中间件示例

class AuthenticationMiddleware(MiddlewareMixin):
    def process_request(self, request):
        if not hasattr(request, "session"):
            raise ImproperlyConfigured(
                "The Django authentication middleware requires session "
                "middleware to be installed. Edit your MIDDLEWARE setting to "
                "insert "
                "'django.contrib.sessions.middleware.SessionMiddleware' before "
                "'django.contrib.auth.middleware.AuthenticationMiddleware'."
            )
        request.user = SimpleLazyObject(lambda: get_user(request))

二、自定义中间件

中间件钩子函数

process_view()中间件钩子函数

基于类的中间件

基于类的自定义中间件格式

class SimpleMiddleware:
    def __init__(self, get_response):
        # 执行一次性配置和初始化工作
        self.get_response = get_response
    def __call__(self, request):
        # 每个请求调用一次,在视图函数被调用之前执行
        response = self.get_response(request)
        # 每个请求调用一次,在视图函数被调用之后执行
        return response

三、实战案例

操作日志功能

通过自定义中间件,实现Django操作日志记录功能

第5步:字典log_data记录的操作日志信息,通过Celery异步任务,写入数据库。实现操作日志记录功能。

代码运行效果:

查看完整代码:下载地址

参考资料

到此这篇关于Django自定义中间件实现全链路操作日志记录的文章就介绍到这了,更多相关django自定义中间件全链路内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文