# apps/accounts/services/auth_service.py from django.contrib.auth import authenticate from django.core.exceptions import ValidationError from django.core.validators import validate_email from rest_framework.authtoken.models import Token from apps.accounts.models import User import logging logger = logging.getLogger(__name__) def authenticate_user(request, username, password): """验证用户身份""" return authenticate(request, username=username, password=password) def create_user(data): """创建用户""" required_fields = ['username', 'password', 'email', 'role', 'name'] for field in required_fields: if not data.get(field): return { "code": 400, "message": f"缺少必填字段: {field}", "data": None, "status": 400 } valid_roles = ['admin', 'leader', 'member'] if data['role'] not in valid_roles: return { "code": 400, "message": f"无效的角色,必须是: {', '.join(valid_roles)}", "data": None, "status": 400 } if User.objects.filter(username=data['username']).exists(): return { "code": 400, "message": "用户名已存在", "data": None, "status": 400 } if User.objects.filter(email=data['email']).exists(): return { "code": 400, "message": "邮箱已被注册", "data": None, "status": 400 } if len(data['password']) < 8: return { "code": 400, "message": "密码长度必须至少为8位", "data": None, "status": 400 } try: validate_email(data['email']) except ValidationError: return { "code": 400, "message": "邮箱格式不正确", "data": None, "status": 400 } try: user = User.objects.create_user( username=data['username'], email=data['email'], password=data['password'], role=data['role'], department=data.get('department'), name=data['name'], group=data.get('group'), is_staff=False, is_superuser=False ) return user except Exception as e: logger.error(f"创建用户失败: {str(e)}") return { "code": 500, "message": f"创建用户失败: {str(e)}", "data": None, "status": 500 } def generate_token(user): """生成或获取用户token""" token, _ = Token.objects.get_or_create(user=user) return token.key def delete_token(user): """删除用户token""" try: user.auth_token.delete() except Token.DoesNotExist: pass