定义序列化器时,一般可以把模型类的文件拿来修改一下,然后就可以根据自定义字段生成了一个序列器。这个序列器可以用来序列化,也可以用来反序列化。
-
序列化器常用的字段类型
字段 | 字段构造方式 |
---|---|
BooleanField | BooleanField() |
NullBooleanField | NullBooleanField() |
CharField | CharField(max_length=None, min_length=None, allow_blank=False, trim_whitespace=True) |
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) |
UUIDField | UUIDField(format='hex_verbose') format: 1) 'hex_verbose' 如"5ce0e9a5-5ffa-654b-cee0-1238041fb31a" 2) 'hex' 如 "5ce0e9a55ffa654bcee01238041fb31a" 3) 'int' - 如: "123456789012312313134124512351145145114" 4) 'urn' 如: "urn:uuid:5ce0e9a5-5ffa-654b-cee0-1238041fb31a" |
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=<a_field_instance>, min_length=None, max_length=None) |
DictField | DictField(child=<a_field_instance>) |
-
序列化器选项
参数名称 | 作用 | 默认值 |
---|---|---|
max_length | 最大长度 | - |
min_lenght | 最小长度 | - |
allow_blank | 是否允许为空字符串 | False |
trim_whitespace | 是否截掉空白字符 | True |
max_value | 最大值 | - |
min_value | 最小值 | - |
-
序列化器通用选项
参数名称 | 说明 | 默认值 | 何时使用 |
---|---|---|---|
read_only | 表明该字段仅用于序列化输出:(例:主键 id) | False | 序列化 |
write_only | 表明该字段仅用于反序列化输入 (例:短信验证码) | False | 反序列化 |
required | 表明该字段在反序列化时必须输入 | True | 反序列化 |
allow_null | 表明该字段是否允许传入None | False | 反序列化 |
default | 反序列化时使用的默认值 | - | 反序列化 |
validators | 该字段使用的验证器 | - | 反序列化 |
error_messages | 包含错误编号与错误信息的字典 | - | - |
label | 用于HTML展示API页面时,显示的字段名称 | - | - |
help_text | 用于HTML展示API页面时,显示的字段帮助提示信息 | - | - |
-
示例
from rest_framework import serializers class EmployeeSerializer(serializers.Serializer): """员工序列化器""" choices_gender = ( (0, '男'), (1, '女'), ) name = serializers.CharField(max_length=20) age = serializers.IntegerField() gender = serializers.ChoiceField(default=0, choices=choices_gender) salary = serializers.DecimalField(max_digits=8, decimal_places=2) comment = serializers.CharField(max_length=300) hire_date = serializers.DateField()
-
使用序列化器实现序列化(对象-->字典)
在员工的app文件夹上定义好模型类models.py和序列化器类serializers.py后,就可以实现序列化了。可以简单快捷地把对象转换为字典。
from [app文件夹].models import * from [app文件夹].serializers import * # 先查询出需要序列化的对象 e = Employee.objects.get(id=1) # 使用序列化器进行序列化,instance=可以省略 a = EmployeeSerializers(instance = e) # 使用data方法取出序列化产生的字典 print(a.data)
注意,如果查询出来的是一个查询集(Query_set,多个对象)时,要对其进行序列化,需要加上many=True
from [app文件夹].models import * from [app文件夹].serializers import * # 先查询出需要序列化的查询集Query_set e = Employee.objects.all() # 使用序列化器进行序列化,instance=可以省略 a = EmployeeSerializers(instance = e,many=True) # 使用data方法取出序列化产生的字典 print(a.data)