from rest_framework import serializers, status, views from rest_framework.response import Response from django.contrib.auth import authenticate, get_user_model User = get_user_model() class LoginSerializer(serializers.Serializer): username = serializers.CharField() password = serializers.CharField() class LoginView(views.APIView): def post(self, request): serializer = LoginSerializer(data=request.data) if not serializer.is_valid(): return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) username = serializer.validated_data['username'] password = serializer.validated_data['password'] user = authenticate(username=username, password=password) if not user: return Response( {'detail': '用户名或密码错误'}, status=status.HTTP_401_UNAUTHORIZED ) # 简单 Token(生产环境应该用 JWT) import uuid token = uuid.uuid4().hex # 实际项目中应该存储 token 到数据库/缓存 # 这里简化处理 return Response({ 'token': token, 'user': { 'id': user.id, 'username': user.username, 'email': user.email } }) class RegisterSerializer(serializers.Serializer): username = serializers.CharField() email = serializers.EmailField() password = serializers.CharField() class RegisterView(views.APIView): def post(self, request): serializer = RegisterSerializer(data=request.data) if not serializer.is_valid(): return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) try: user = User.objects.create_user( username=serializer.validated_data['username'], email=serializer.validated_data['email'], password=serializer.validated_data['password'] ) import uuid token = uuid.uuid4().hex return Response({ 'token': token, 'user': { 'id': user.id, 'username': user.username, 'email': user.email } }, status=status.HTTP_201_CREATED) except Exception as e: return Response( {'detail': str(e)}, status=status.HTTP_400_BAD_REQUEST )