如何检测Django是否通过manage migrate/syncdb命令启动
Django apps.py 检测manage命令参数方案
实现思路
通过manage.py执行Django命令时,所有传入参数都会保存在系统内置的sys.argv列表中,直接在apps.py的ready()方法中读取该列表判断命令类型,即可实现migrate/syncdb场景下跳过指定逻辑的需求。
代码示例
import sys from django.apps import AppConfig class YourAppConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = '你的应用名' def ready(self): # 检测当前是否为migrate/syncdb命令场景 if len(sys.argv) > 1 and {'migrate', 'syncdb'} & set(sys.argv): # 命中命令直接返回,跳过后续不需要执行的操作 return # 原有需要执行的正常逻辑写在下方 # ...
场景适配说明
- 执行
python3 manage.py migrate/python3 manage.py syncdb命令时,判断条件命中,跳过指定逻辑 - 执行
python3 manage.py runserver命令时,判断条件不命中,原有逻辑正常执行 - 直接运行包含
django.setup()的自定义Python文件时,sys.argv中无migrate/syncdb参数,原有逻辑正常执行
内容的提问来源于stack exchange,提问作者Omroth
相关产品推荐
相关产品推荐

