Files
medical_training/apps/user/management/commands/init_users.py
T

115 lines
3.7 KiB
Python

import os
from django.core.management.base import BaseCommand
from django.contrib.auth import get_user_model
User = get_user_model()
class Command(BaseCommand):
help = '初始化系统用户数据'
def add_arguments(self, parser):
parser.add_argument(
'--reset',
action='store_true',
help='重置所有用户数据',
)
def handle(self, *args, **options):
if options['reset']:
self.stdout.write(self.style.WARNING('正在清除所有用户...'))
User.objects.filter(is_superuser=False).delete()
self.stdout.write(self.style.SUCCESS('普通用户已清除'))
# 创建超级管理员
self._create_superadmin()
# 创建测试角色用户
self._create_test_users()
self.stdout.write(self.style.SUCCESS('\n[完成] 用户初始化完成'))
def _create_superadmin(self):
"""创建超级管理员"""
username = 'admin'
password = 'admin123'
user, created = User.objects.get_or_create(
username=username,
defaults={
'is_staff': True,
'is_superuser': True,
'real_name': '系统管理员',
'role_type': 'super_admin',
'status': 1,
}
)
user.set_password(password)
user.save()
if created:
self.stdout.write(self.style.SUCCESS(f'[创建] 超级管理员: {username} / {password}'))
else:
self.stdout.write(self.style.WARNING(f'[重置] 管理员密码: {username} / {password}'))
def _create_test_users(self):
"""创建测试用户"""
test_users = [
{
'username': 'doctor1',
'password': 'doctor123',
'real_name': '张医生',
'role_type': 'doctor',
'phone': '13800138001',
'title_name': '主任医师',
'major': '心内科',
},
{
'username': 'student1',
'password': 'student123',
'real_name': '李同学',
'role_type': 'student',
'phone': '13800138002',
'training_stage': '规培',
'learning_target': '掌握常见病诊断',
},
{
'username': 'teacher1',
'password': 'teacher123',
'real_name': '王老师',
'role_type': 'teacher',
'phone': '13800138003',
'title_name': '副主任医师',
'major': '呼吸内科',
},
{
'username': 'content_admin',
'password': 'content123',
'real_name': '内容管理员',
'role_type': 'content_admin',
'phone': '13800138004',
},
]
for user_data in test_users:
password = user_data.pop('password')
user, created = User.objects.get_or_create(
username=user_data['username'],
defaults={**user_data, 'status': 1}
)
user.set_password(password)
user.save()
if created:
self.stdout.write(
self.style.SUCCESS(
f'[创建] 用户: {user_data["username"]} / {password} ({user_data["real_name"]})'
)
)
else:
self.stdout.write(
self.style.WARNING(
f'[已存在] 用户: {user_data["username"]} ({user_data["real_name"]})'
)
)