我正在 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'>`
我已经尝试过尝试和例外,以及在用户不存在时添加响应,但仍然没有任何效果。
我认为你必须修复缩进
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'})