Django管理命令
编写自定义manage.py命令,实现后台任务自动化。 · 难度:入门 · +15XP
管理命令概述
Django的管理命令是通过manage.py调用的Python脚本。你可以编写自定义命令来执行数据迁移、清理过期数据、发送通知等后台任务。
目录结构
在app目录下创建management/commands/文件夹,注意每个目录下都需要__init__.py文件。
myapp/
management/
__init__.py
commands/
__init__.py
my_command.py编写命令
from django.core.management.base import BaseCommand
from myapp.models import Article
class Command(BaseCommand):
help = '清理过期的文章'
def add_arguments(self, parser):
parser.add_argument('--days', type=int, default=30,
help='删除多少天前的文章')
def handle(self, *args, **options):
days = options['days']
from datetime import datetime, timedelta
cutoff = datetime.now() - timedelta(days=days)
deleted_count = Article.objects.filter(created_at__lt=cutoff).delete()[0]
self.stdout.write(self.style.SUCCESS(f'成功删除 {deleted_count} 篇文章'))运行命令
python manage.py my_command --days 60| 方法 | 用途 |
|---|---|
| add_arguments | 定义命令行参数 |
| handle | 核心业务逻辑 |
| self.stdout.write | 输出信息到控制台 |
| self.style.SUCCESS | 带颜色的成功提示 |
练习提示: 补全starter_code中的命令类,使其能接受--status参数,并打印所有状态为'published'的文章标题。