class LoginSerializer(serializers.Serializer):
password = serializers.CharField(required=False, style={'input_type': 'password'})
default_error_messages = {
'inactive_account': constants.INACTIVE_ACCOUNT_ERROR,
'invalid_credentials': constants.INVALID_CREDENTIALS_ERROR,
}
def __init__(self, *args, **kwargs):
super(LoginSerializer, self).__init__(*args, **kwargs)
self.user = None
self.fields[User.USERNAME_FIELD] = serializers.CharField(required=False)
def validate(self, attrs):
self.user = authenticate(username=attrs.get(User.USERNAME_FIELD), password=attrs.get('password'))
if self.user:
if not self.user.is_active:
raise serializers.ValidationError(self.error_messages['inactive_account'])
return attrs
else:
raise serializers.ValidationError(self.error_messages['invalid_credentials'])
def to_internal_value(self, data):how can I avoid to strip when `self.trim_whitespace` is True ?
value = six.text_type(data)
return value.strip() if self.trim_whitespace else value
(Tho far better would be to *always* trim whitespace both on password creation and check)