微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Django 管理命令的开头和结尾记录一些东西

如何解决在 Django 管理命令的开头和结尾记录一些东西

现在我的 Django 项目中有多个管理命令。

我想在命令的开头和结尾记录类似 [command_name] command started[command_name] command finished内容,这样我就不会在每个命令中重复自己。

已经在 handle() 方法之上尝试过装饰器,但认为这不是一个好的解决方案,因为我必须在所有命令中装饰 handle() 方法

PS:我正在使用 python 记录器。

编辑

到了这一点:

class Parent(BaseCommand):

    def __init__(self,*args,**kwargs):
        logger.info(f'started {self.__module__}')
        super().__init__(*args,**kwargs)
        logger.info(f'finished {self.__module__}')

输出

> started command_name
> finished command_name
> actual command logs

解决方法

编写一个基类,您的所有命令都应从该基类继承并在其中进行日志记录。记录输出的一个好地方是覆盖命令的 execute 方法(您的代码以错误的顺序记录,因为该命令实际上不是由 __init__ 方法运行的,它实际上是在单独使用类的 run_from_argv 方法进行类):

from django.core.management.base import BaseCommand as DjangoBaseCommand

class BaseCommand(DjangoBaseCommand):
    def execute(self,*args,**options):
        logger.info(f'started {self.__module__}')
        output = super().execute(*args,**options)
        logger.info(f'finished {self.__module__}')
        return output

现在你的所有命令都简单地从这个命令继承:

from some_app.somewhere import BaseCommand


class MyCommand(BaseCommand):
    # Your code here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?