如何在 rest 框架中为我的注册视图编写登录视图?

How to write a login view for my register view in rest frame work?

我是 Django 和 rest 框架的初学者,我正在尝试使用 rest 框架为我的注册视图编写一个基于 class 的登录视图,请帮助我编写登录名 class-based view 重要的是 view 是 class-based with rest 这是我的项目的注册视图,然后是它底部的序列化程序


    class RegisterView(GenericAPIView):
    serializer_class = UserSerializer
    permission_classes = (permissions.AllowAny,)

    def post(self, request):
        serializer = UserSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            user_data = serializer.data
            user = User.objects.get(email=user_data['email'])
            token = RefreshToken.for_user(user).access_token
            current_site = get_current_site(request).domain
            print(current_site)
            # relativeLink = reverse('verify-email')
            # print(type(relativeLink))
            absurl = 'http://' + current_site + "?token=" + str(token)
            email_body = 'سلام' + user.username + '\nبرای فعال سازی حساب خود وارد لینک زیر شوید' + '\n' \
                         + absurl
            data = {'email_body': email_body, 'to_email': user.email, 'email_subject':  'Verify your email'}
            Util.send_email(data)
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

它是serializer.py

中的寄存器视图序列化器
 

    class UserSerializer(serializers.ModelSerializer):
    password = serializers.CharField(
        max_length=65, min_length=8, write_only=True)
    confirm_password = serializers.CharField(
        max_length=65, min_length=8, write_only=True)

    def validate_email(self, value):
        lower_email = value.lower()
        if User.objects.filter(email__iexact=lower_email).exists():
            raise serializers.ValidationError("ایمیل تکراری است")
        return lower_email




    def validate(self, data):
        if not data.get('password') or not data.get('confirm_password'):
            raise serializers.ValidationError("لطفا پسورد را وارد و تایید  کنید ")
        if data.get('password') != data.get('confirm_password'):
            raise serializers.ValidationError("پسورد اشتباه است")
        return data

    class Meta:
        model = User
        fields = ['username', 'email', 'password', 'confirm_password'
                  ]
        write_only_fields = ('password', 'repeat_password')

    def create(self, validated_data):
        user = User.objects.create(
            username=validated_data['username'],
            email=validated_data['email'],
        )

        user.set_password(validated_data['password'])
        user.set_password(validated_data['confirm_password'])
        user.save()

        return user


class LoginView(APIView):
    def post(self, request):
        username = request.data['username']
        password = request.data['password']
        # use a method to get access token (from the package you are using)
        # access token class will return access token if the user is authenticated
        # otherwise it will return error response
        pass