如何解决在 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 举报,一经查实,本站将立刻删除。