1 回答

TA貢獻1906條經驗 獲得超3個贊
好的,多虧了 Shafikur Rahman 的建議,我才能讓它發揮作用。在我嘗試調試它pdb并在里面設置跟蹤LoginUserSerializer但沒有發生任何事情之后,我意識到在我的視圖中我不是指向我編寫的序列化程序,而是指向AuthTokenSerializer. 即使在那之后它仍然不起作用,因為我對 djangologin()和 DRF 的validate()工作原理缺乏了解。以下固定代碼供參考:
看法:
class LoginUserView(LoginView):
serializer_class = LoginUserSerializer
permission_classes = [AllowAny]
def post(self, request, *args, **kwargs):
serializer = LoginUserSerializer(data=request.data) # changed to desired serializer
serializer.is_valid(raise_exception=True)
user = serializer.validated_data['user']
login(request, user)
return super(LoginUserView, self).post(request)
和序列化器:
class LoginUserSerializer(serializers.ModelSerializer):
username = serializers.CharField() # added missing fields for serializer
password = serializers.CharField()
class Meta:
model = UserModel
fields = ('username', 'password')
def validate(self, data):
user = authenticate(**data)
if user:
if user.is_active:
data['user'] = user # added user model to OrderedDict that serializer is validating
return data # and in sunny day scenario, return this dict, as everything is fine
raise exceptions.AuthenticationFailed('Account is not activated')
raise exceptions.AuthenticationFailed()
另外為了authenticate()不能激活用戶,我不得不添加
AUTHENTICATION_BACKENDS = [
'django.contrib.auth.backends.AllowAllUsersModelBackend'
]
在項目設置中。
添加回答
舉報