from rest_framework import serializers from django.contrib.auth import get_user_model from rest_framework_simplejwt.tokens import RefreshToken User = get_user_model() class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ('id', 'username', 'email', 'is_staff') class RegisterSerializer(serializers.Serializer): username = serializers.CharField(min_length=3, max_length=20) email = serializers.EmailField() password = serializers.CharField(min_length=6, write_only=True) def validate_username(self, value): if User.objects.filter(username=value).exists(): raise serializers.ValidationError('该用户名已被注册') return value def validate_email(self, value): if User.objects.filter(email=value).exists(): raise serializers.ValidationError('该邮箱已被注册') return value def create(self, validated_data): user = User.objects.create_user( username=validated_data['username'], email=validated_data['email'], password=validated_data['password'], ) return user class LoginSerializer(serializers.Serializer): username = serializers.CharField() password = serializers.CharField(write_only=True) class TokenResponseSerializer(serializers.Serializer): """Response serializer for auth endpoints.""" user = UserSerializer() tokens = serializers.SerializerMethodField() def get_tokens(self, obj): refresh = RefreshToken.for_user(obj) return { 'access': str(refresh.access_token), 'refresh': str(refresh), }