Django自定义命令
我们知道,Django内部内置了很多命令,例如
python manage.py runserver
python manage.py makemigrations
python manage.py migrate
我们可以在python控制台中查看所有命令

我们也可以自定义命令,让python manage.py执行
- 在已注册的app中创建指定的文件夹
management和二级文件夹commands(文件夹名称固定) - 在文件夹
commands中创建文件wilson.py,命令就为python manage.py wilson
在wilson.py文件中,我们需要写一个Command类,继承BaseCommand,并重写handle()方法
当我们执行python manage.py wilson时,具体的操作就在handle()方法中
from django.core.management.base import BaseCommand
class Command(BaseCommand):
def handle(self, *args, **options):
print("wilson")

在其父类BaseCommand中,有一个add_arguments方法,可以支持我们解析命令后的参数(字典形式)
from django.core.management.base import BaseCommand
class Command(BaseCommand):
def handle(self, *args, **options):
print("wilson", options)
def add_arguments(self, parser):
parser.add_argument("v1")
parser.add_argument("v2")

关于python manage.py createsuperuser命令
在django中的auth-app中,有一个createsupersuer.py文件

在其初始化方法中,执行函数get_user_model(),本质上是去寻找指定的model类,读取配置文件中的AUTH_USER_MODEL = "auth.User",也就是auth中的User表

然后去寻找USERNAME_FIELD字段,也就是配置文件中定义的"username"
在其handle()函数中,主要执行提示信息和接受我们输入的用户名,密码,邮箱

在其最后执行了
self.UserModel._default_manager.db_manager(database).create_superuser(**user_data)
本质上就是执行了内部的自定义命令create_superuser来创建超级用户
User.objects.create_superuser(**user_data)
注:其中db_manager(database)用来选择数据库,默认是default


















