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