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"]})' ) )