Django 创建和运行管理命令

示例

要使用命令行或其他服务(不使用用户/请求)在Django中执行操作,可以使用management commands。

可以根据需要导入Django模块。

对于每个命令一个单独的文件需要被创建: myapp/management/commands/my_command.py
(该management和commands目录必须有一个空的__init__.py文件)

from django.core.management.base import BaseCommand, CommandError

# import additional classes/modules as needed
# frommyapp.modelsimport Book

class Command(BaseCommand):
    help = 'My custom django management command'

    def add_arguments(self, parser):
       parser.add_argument('book_id', nargs='+', type=int)
       parser.add_argument('author' , nargs='+', type=str)

    def handle(self, *args, **options):
       bookid = options['book_id'] 
       author = options['author']
       # Your code goes here
        
        # For example:
        # books = Book.objects.filter(author="bob")
        # for book in books:
        #   book.name= "Bob"
        #    book.save()

在这里,类名Command是必需的,它扩展了BaseCommand或其子类之一。

管理命令的名称是包含该命令的文件的名称。要在上面的示例中运行命令,请在项目目录中使用以下命令:

pythonmanage.pymy_command

请注意,启动命令可能需要花费几秒钟的时间(由于模块的导入)。因此,在某些情况下,建议创建daemon流程而不是management commands。

有关管理命令的更多信息