序列化器在 Django Login 中找不到对象时出现断言错误

问题描述 投票:0回答:1

我正在 django 中创建一个具有自定义注册和登录功能的应用程序,其行为类似于表单,但是当我使用错误的凭据登录时,程序会返回一个 AssertionError。 .

views.py

...
def post(self, request):

    serializer = LoginSerializer(data=request.data)
    if serializer.is_valid():

    email = serializer.validated_data['email']
    password = serializer.validated_data['password']

    user = authenticate(email=email, password=password)

    if user:
            
        login(request, user)

            return redirect('/')

    else:

        return Response({'erro': 'user nao encontrado'})

序列化器.py

class LoginSerializer(serializers.ModelSerializer):

    email = serializers.EmailField(required=True)
    password = serializers.CharField(write_only=True,
        style={'input_type': 'password'})

    class Meta:

        model = Profile
        fields = ['email', 'password']

    def validate(self, attrs):

        email = attrs.get('email')
        password = attrs.get('password')

        if email and password:

            user = authenticate(email=email,
                password=password)

            if not user:

                raise serializers.ValidationError('O usuário não existe')


        attrs['user'] = user

        return attrs

有问题的错误:

AssertionError at /accounts/login/
Expected a `Response`, `HttpResponse` or `StreamingHttpResponse` to be returned from the view, but received a `<class 'NoneType'>`

我已经尝试过尝试和例外,以及在用户不存在时添加响应,但仍然没有任何效果。

python django django-rest-framework
1个回答
0
投票

我认为你必须修复缩进

def post(self, request):

    serializer = LoginSerializer(data=request.data)
    if serializer.is_valid():

        email = serializer.validated_data['email']
        password = serializer.validated_data['password']

        user = authenticate(email=email, password=password)

        if user:
        
            login(request, user)

            return redirect('/')

        else:

            return Response({'erro': 'user nao encontrado'})
© www.soinside.com 2019 - 2024. All rights reserved.