class SensitiveDataSerializer2(serializers.ModelSerializer): username = serializers.CharField() password = serializers.CharField(write_only=True) class Meta: model = SensitiveOrderingFilterModel fields = ('id', 'username', 'password')
def test_allow_blank(self): """ If `allow_blank=True` then '' is a valid input. """ field = serializers.CharField(allow_blank=True) output = field.run_validation('') assert output == ''
class TestDictField(FieldValues): """ Values for `ListField` with CharField as child. """ valid_inputs = [ ({ 'a': 1, 'b': '2', 3: 3 }, { 'a': '1', 'b': '2', '3': '3' }), ] invalid_inputs = [ ({ 'a': 1, 'b': None }, ['This field may not be null.']), ('not a dict', ['Expected a dictionary of items but got type "str".']), ] outputs = [ ({ 'a': 1, 'b': '2', 3: 3 }, { 'a': '1', 'b': '2', '3': '3' }), ] field = serializers.DictField(child=serializers.CharField())
class ExampleSerializer(serializers.Serializer): choice_field = serializers.ChoiceField(['red', 'green', 'blue']) integer_field = serializers.IntegerField(min_value=1, max_value=1000) char_field = serializers.CharField(required=False, min_length=3, max_length=40)
def test_disallow_blank(self): """ By default '' is not a valid input. """ field = serializers.CharField() with pytest.raises(serializers.ValidationError) as exc_info: field.run_validation('') assert exc_info.value.detail == ['This field may not be blank.']
class ValidationSerializer(serializers.Serializer): foo = serializers.CharField() def validate_foo(self, attrs, source): raise serializers.ValidationError("foo invalid") def validate(self, attrs): raise serializers.ValidationError("serializer invalid")
def __init__(self, *args, **kwargs): """ Dynamically add the USERNAME_FIELD to self.fields. """ super(JSONWebTokenSerializer, self).__init__(*args, **kwargs) self.fields[self.username_field] = serializers.CharField() self.fields['password'] = PasswordField(write_only=True)
class ShouldValidateModelSerializer(serializers.ModelSerializer): renamed = serializers.CharField(source='should_validate_field', required=False) def validate_renamed(self, value): if len(value) < 3: raise serializers.ValidationError('Minimum 3 characters.') return value class Meta: model = ShouldValidateModel fields = ('renamed',)
class AuthTokenSerializer(serializers.Serializer): username = serializers.CharField() password = serializers.CharField(style={'input_type': 'password'}) def validate(self, attrs): username = attrs.get('username') password = attrs.get('password') if username and password: user = authenticate(username=username, password=password) if user: if not user.is_active: msg = _('User account is disabled.') raise exceptions.ValidationError(msg) else: msg = _('Unable to log in with provided credentials.') raise exceptions.ValidationError(msg) else: msg = _('Must include "username" and "password".') raise exceptions.ValidationError(msg) attrs['user'] = user return attrs
class TestCharField(FieldValues): """ Valid and invalid values for `CharField`. """ valid_inputs = {1: '1', 'abc': 'abc'} invalid_inputs = {'': ['This field may not be blank.']} outputs = {1: '1', 'abc': 'abc'} field = serializers.CharField() def test_trim_whitespace_default(self): field = serializers.CharField() assert field.to_internal_value(' abc ') == 'abc' def test_trim_whitespace_disabled(self): field = serializers.CharField(trim_whitespace=False) assert field.to_internal_value(' abc ') == ' abc '
class VerificationBaseSerializer(Serializer): """ Abstract serializer used for verifying and refreshing JWTs. """ token = serializers.CharField() def validate(self, attrs): msg = 'Please define a validate method.' raise NotImplementedError(msg) def _check_payload(self, token): # Check payload valid (based off of JSONWebTokenAuthentication, # may want to refactor) try: payload = jwt_decode_handler(token) except jwt.ExpiredSignature: msg = _('Signature has expired.') raise serializers.ValidationError(msg) except jwt.DecodeError: msg = _('Error decoding signature.') raise serializers.ValidationError(msg) return payload def _check_user(self, payload): username = jwt_get_username_from_payload(payload) if not username: msg = _('Invalid payload.') raise serializers.ValidationError(msg) # Make sure user exists try: user = User.objects.get_by_natural_key(username) except User.DoesNotExist: msg = _("User doesn't exist.") raise serializers.ValidationError(msg) if not user.is_active: msg = _('User account is disabled.') raise serializers.ValidationError(msg) return user
class BookSerializer(serializers.Serializer): id = serializers.IntegerField() title = serializers.CharField(max_length=100) author = serializers.CharField(max_length=100)
class ExampleSerializer(serializers.Serializer): text = serializers.CharField(max_length=100) nested = Nested()
class ExampleSerializer(serializers.Serializer): example_field = serializers.CharField(source='other')
class ExampleSerializer(serializers.Serializer): omitted = serializers.CharField(default='abc') included = serializers.CharField()
class ExampleSerializer(serializers.Serializer): omitted = serializers.CharField(required=False) included = serializers.CharField() def create(self, validated_data): return MockObject(**validated_data)
class ExampleSerializer(serializers.Serializer): omitted = serializers.CharField(required=False) included = serializers.CharField()
class ExampleSerializer(serializers.Serializer): example = serializers.CharField()
class ExampleSerializer(serializers.Serializer): char = serializers.CharField() integer = serializers.IntegerField()
class TestSerializer(serializers.ModelSerializer): non_model_field = serializers.CharField() class Meta: model = OneFieldModel fields = ('char_field', 'non_model_field')
class ExampleSerializer(serializers.Serializer): example_field = serializers.CharField(source='example_callable')
class ExampleSerializer(serializers.Serializer): email = serializers.EmailField() password = serializers.CharField(write_only=True) def create(self, attrs): return attrs
class ExampleSerializer(serializers.Serializer): choice_field = serializers.ChoiceField(['red', 'green', 'blue']) integer_field = serializers.IntegerField(max_value=10) char_field = serializers.CharField(required=False)
def test_trim_whitespace_default(self): field = serializers.CharField() assert field.to_internal_value(' abc ') == 'abc'
class ExampleSerializer(serializers.Serializer): char = serializers.CharField() integer = serializers.IntegerField() def validate(self, attrs): raise serializers.ValidationError({'char': 'Field error'})
class ExampleSerializer(serializers.Serializer): text = serializers.CharField(max_length=100) amount = serializers.IntegerField()
class RegexSerializer(serializers.Serializer): pin = serializers.CharField( validators=[RegexValidator(regex=re.compile('^[0-9]{4,6}$'), message='A PIN is 4-6 digits')])
class Nested(serializers.Serializer): more_text = serializers.CharField(max_length=100) amount = serializers.IntegerField()
class ExampleSerializer(serializers.Serializer): field1 = serializers.CharField() field2 = serializers.CharField()
def test_trim_whitespace_disabled(self): field = serializers.CharField(trim_whitespace=False) assert field.to_internal_value(' abc ') == ' abc '