在任何django管理命令之前运行代码

Ant*_*des 5 django

使用中间件,我可以在每个HTTP请求的开头和结尾执行代码.

使用Celery任务,我可以通过使用task_preruntask_postrun信号来完成相同的任务.

那些django管理命令呢?是否有可能在每个django管理命令的开头(可能结束)运行代码?此类代码还必须知道哪个django管理命令即将运行(或已完成运行).应用程序启动时有一个关于信号的票据可能会也可能不会执行我想要的操作,但它还没有准备就绪.

Ber*_*ant 2

正如您正确指出的那样,Django 中没有特定的位置可以放置在每次启动时执行的代码......

您可能会出于此目的而“滥用”某些地方,例如。inurls.py或 in 中的代码models.py应该在启动时运行...(例如,管理员将这种情况用于其admin.autodiscover()in urls.py)。

还有一些可能性可以查明代码是否由于管理命令的执行而正在运行;您可以通过简单地检查命令行参数sys.argv是否包含任何管理命令。另一种可能性是通过服务器/管理命令指定运行应用程序的不同设置......