官方文档:https://docs.djangoproject.com/zh-hans/3.1/howto/custom-management-commands/
1.只需为应用添加一个 management/commands 目录
2._private.py
模型不会以管理命令的形式提供,closepoll.py
模块只有一个要求——必须定义Command
类,继承自 BaseCommand
或其子类。
3.add_arguments()
方法为你的命令添加参数,handle(self, *args, **options)
方法do something
注:当你使用管理命令时,期望在终端输出内容,你需要 write 至 self.stdout
和 self.stderr
,而不是直接 print 至stdout
和stderr
。利用这些代理,测试定义命令会更方便。也请注意下,你不需要为消息添加一个新行字符,它会自动添加,除非你指定了 ending 参数:self.stdout.write("Unterminated line", ending='')
apps/users/management/commands/createuser.py:
from django.core.management.base import BaseCommand, CommandError
from users.models import User
from django.contrib.auth.hashers import make_password
from faker import Faker
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument('num', nargs='+', type=int)
def handle(self, *args, **options):
#print(options.get('num'))
number = options.get('num')[0] # 注意:此处options.get('num')是一个列表
if number is None:
number = 5
password = make_password('123456')
faker = Faker(locale="zh_CN")
for _ in range(int(number)):
data = {
'username': faker.name_male(),
'mobile': faker.phone_number(),
'password': password,
'is_superuser': True,
}
try:
User.objects.create(
**data
)
User.save()
except:
CommandError('创建失败!')
self.stdout.write(self.style.SUCCESS('Successfully create user "%s"' % faker.name_male()))
效果: