每次在启动Django服务之前,我们都会在终端运行python manage.py xxx
的管理命令。其实我们还可以自定义管理命令,这对于执行独立的脚本或任务非常有用,比如清除缓存、导出用户邮件清单或发送邮件等等。
自定义的管理命令不仅可以通过manage.py
运行,还可以通过Linux或Celery的crontab服务将其设成定时任务。本文主要讲解如何自定义Django-admin命令,并提供一些演示案例。
自定义Django-admin命令一共分三步:创建文件夹布局、编写命令代码和测试使用。
创建文件夹布局
自定义的Django-admin管理命令本质上是一个python脚本文件,它的存放路径必须遵循一定的规范,一般位于app/management/commands
目录。整个文件夹的布局如下所示:
app01/
__init__.py
models.py
management/
__init__.py
commands/
__init__.py
_private.py # 以下划线开头文件不能用作管理命令
my_commands.py # 这个就是自定义的管理命令脚本,文件名即为命令名
tests.py
views.py
注意:
management
和commands
每个目录下都必须有个__init__.py
空文件,表明这是一个python包。另外以下划线开头的文件名不能用作管理命令脚本。management/commands
目录可以位于任何一个app的目录下,Django都能找到它。一般建议每个python脚本文件对应一条管理命令。
编写命令代码
每一个自定义的管理命令本质是一个Command
类, 它继承了Django的Basecommand
或其子类, 主要通过重写handle()
方法实现自己的业务逻辑代码,而add_arguments()
则用于帮助处理命令行的参数,如果运行命令时不需要额外参数,可以不写这个方法。
from django.core.management.base import BaseCommand
class Command(BaseCommand):
# 帮助文本, 一般备注命令