DRF-serializers.Serializer序列化器
参考博客 https://blog.csdn.net/qq_35876972/article/details/104826650
class StudentInfo(models.Model): name = models.CharField(max_length=20, verbose_name='姓名') birthday = models.DateField(verbose_name='生日', null=True) money = models.IntegerField(default=0, verbose_name='现金') image = models.ImageField(upload_to='studenttest', verbose_name='照片', null=True)
1. 手动定义一个序列化器
Django REST framework中的Serializer使用类来定义,须继承自rest_framework.serializers.Serializer 注意: serializer不是只能为数据库模型类定义,也可以为非数据库模型类的数据定义.serializer是独立于数据库之外的存在
#导入父类进行继承 from rest_framework import serializers class StudentSerializer(serializers.Serializer) id = serializers.IntegerField(label='ID', read_only=True) name = serializers.CharField(label='姓名', max_length=20) birthday = serializers.DateField(label='生日', required=False) money = serializers.IntegerField(label='现金', required=False) image = serializers.ImageField(label='照片', required=False)
2. 序列化器的字段与选项
- 字段
CharField: CharField(max_length=None, min_length=None, allow_blank=False, trim_whitespace=True) IntegerField: IntegerField(max_value=None, min_value=None) BooleanField: BooleanField() NullBooleanField: NullBooleanField() EmailField: EmailField(max_length=None, min_length=None, allow_blank=False) RegexField: RegexField(regex, max_length=None, min_length=None, allow_blank=False) SlugField: SlugField(maxlength=50, min_length=None, allow_blank=False)正则字段,验证正则模式 [a-zA-Z0-9-]+ URLField: URLField(max_length=200, min_length=None, allow_blank=False) IPAddressField: IPAddressField(protocol='both', unpack_ipv4=False, **options) IntegerField: IntegerField(max_value=None, min_value=None) FloatField: FloatField(max_value=None, min_value=None) DecimalField: DecimalField(max_digits, decimal_places, coerce_to_string=None, max_value=None, min_value=None) max_digits: 最多位数,decimal_palces: 小数点位置 DateTimeField: DateTimeField(format=api_settings.DATETIME_FORMAT, input_formats=None) DateField: DateField(format=api_settings.DATE_FORMAT, input_formats=None) TimeField: TimeField(format=api_settings.TIME_FORMAT, input_formats=None) DurationField: DurationField() ChoiceField: ChoiceField(choices) choices与Django的用法相同 MultipleChoiceField: MultipleChoiceField(choices) FileField: FileField(max_length=None, allow_empty_file=False,use_url=UPLOADED_FILES_USE_URL) ImageField: ImageField(max_length=None,allow_empty_file=False,use_url=UPLOADED_FILES_USE_URL) ListField: ListField(child=, min_length=None, max_length=None) DictField: DictField(child=)
max_length: 最大长度 min_lenght: 最小长度 allow_blank: 是否允许为空 trim_whitespace: 是否截断空白字符 max_value: 最小值 min_value: 最大值
-
通用选项
read_only: 表明该字段仅用于序列化输出,默认False write_only: 表明该字段仅用于反序列化输入,默认False required: 表明该字段在反序列化时必须输入,默认True default: 反序列化时使用的默认值 allow_null: 表明该字段是否允许传入None,默认False validators: 该字段使用的验证器 error_messages: 包含错误编号与错误信息的字典 label: 用于HTML展示API页面时,显示的字段名称 help_text: 用于HTML展示API页面时,显示的字段帮助提示信息
3. 创建Serializer对象
Serializer
的构造方法为:
Serializer(instance=None, data=empty, **kwarg)
instance: 序列化时传入的模型类对象 data: 反序列化是需要传入的数据 除了instance和data参数外,在构造Serializer对象时,还可通过context参数额外添加数据,如serializer = AccountSerializer(account, context={'request': request})通过context参数附加的数据,可以通过Serializer对象的context属性获取