Django TypeError:validate_email()缺少1个必需的位置参数:';密码';
我试图覆盖rest_auth的默认登录序列化程序,当我尝试登录时,它会抛出此错误。 这是我的密码: 设置.pyDjango TypeError:validate_email()缺少1个必需的位置参数:';密码';,django,django-models,django-rest-framework,django-authentication,django-rest-auth,Django,Django Models,Django Rest Framework,Django Authentication,Django Rest Auth,我试图覆盖rest_auth的默认登录序列化程序,当我尝试登录时,它会抛出此错误。 这是我的密码: 设置.py REST_AUTH_SERIALIZERS = { 'LOGIN_SERIALIZER': 'Customer.apis.serializers.LoginSerializer', } 和登录序列化程序 class LoginSerializer(serializers.ModelSerializer): email = serializers.EmailField
REST_AUTH_SERIALIZERS = {
'LOGIN_SERIALIZER': 'Customer.apis.serializers.LoginSerializer',
}
和登录序列化程序
class LoginSerializer(serializers.ModelSerializer):
email = serializers.EmailField(write_only=True)
password = serializers.CharField(write_only=True)
class Meta:
model = Customer
fields = ['email', 'password']
def validate_email(self, email, password):
user = None
if email and password:
user = authenticate(email=email,
password=password)
else:
raise exceptions.ValidationError('Invalid Credentials')
return user
def validate(self, attrs):
email = attrs.get('email')
password = attrs.get('password')
user = self.validate_email(email, password)
attrs['user'] = user
return attrs
可能是什么错误?可能的解决方法是什么?好吧,如果您命名一个方法,如
validate\u
,那么它将在该字段的表单验证(根据)期间被调用,并且只有一个参数将通过该方法传递,即该字段的值。因此,您需要将其重命名为其他名称。例如:
def verify_credentials(self, email, password):
user = None
if email and password:
user = authenticate(email=email,
password=password)
else:
raise exceptions.ValidationError('Invalid Credentials')
return user
def validate(self, attrs):
email = attrs.get('email')
password = attrs.get('password')
user = self.verify_credentials(email, password)
attrs['user'] = user
return attrs
validate\u email
方法将只接受1个参数,而不是2个。为此,我遇到了另一个问题。在将其更改为验证\u凭据时,我得到一个非空约束失败:authtoken\u token.user\u id错误。这次可能有什么问题?您需要为此添加完整的错误堆栈跟踪。如果你用这个问题问一个新问题会更好,因为不幸的是,这超出了当前问题的范围。我还建议在新问题中添加更多与该错误相关的代码。:)