- 序列化类
from rest_framework import serializers class BookSerializer(serializers.Serializer): # 要序列化的字段 有很多字段类,字段类有很多字段属性 name = serializers.CharField() # 字段类 # price = serializers.CharField() publish = serializers.CharField()
2. 视图内的使用
多条数据 class BookView(APIView): # APIView继承自django的View def get(self, request): book_list = Book.objects.all() # instance表示要序列化的数据,many=True表示序列化多条(instance是qs对象,一定要传many=True) ser = BookSerializer(instance=book_list, many=True) return Response(ser.data) 单条数据 class BookDetailView(APIView): def get(self, request, pk): book = Book.objects.filter(pk=pk).first() ser = BookSerializer(instance=book) return Response(ser.data)
3. 反序列化之新增数据
3.1 视图类
class BookView(APIView): # APIView继承自django的View def post(self, request): # 前端传递数据,从request.data取出来 ser = BookSerializer(data=request.data) if ser.is_valid(): # 表示校验前端传入的数据 没有写校验规则,现在等于没校验 ser.save() # 再写东西,这里会报错 调用save会触发BookSerializer的save方法,判断了,如果instance有值执行update,没有值执行create return Response(ser.data) else: return Response(ser.errors)
3.2 序列化类
class BookSerializer(serializers.Serializer): # 要序列化的字段 有很多字段类,字段类有很多字段属性 name = serializers.CharField() # 字段类 price = serializers.CharField() publish = serializers.CharField() # 重写create方法, def create(self, validated_data): res = Book.objects.create(**validated_data) return res
4. 反序列化之修改数据
4.1 视图类
class BookDetailView(APIView): def put(self, request, pk): book = Book.objects.filter(pk=pk).first() # 前端传递数据,从request.data取出来 ser = BookSerializer(instance=book, data=request.data) if ser.is_valid(): # 表示校验前端传入的数据 没有写校验规则,现在等于没校验 ser.save() # 再写东西,这里会报错 调用save会触发BookSerializer的save方法,判断了,如果instance有值执行update,没有值执行create return Response(ser.data) else: return Response(ser.errors)
4.2 序列化器
class BookSerializer(serializers.Serializer): # 要序列化的字段 有很多字段类,字段类有很多字段属性 name = serializers.CharField() # 字段类 price = serializers.CharField() publish = serializers.CharField() # 重写update def update(self, instance, validated_data): # instance要修改的对象 # validated_data 校验过后的数据 instance.name = validated_data.get('name') instance.price = validated_data.get('price') instance.publish = validated_data.get('publish') instance.save() return instance
5.
常用字段类
字段 | 字段构造方式 |
---|---|
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=, min_length=None, max_length=None) |
DictField | DictField(child=,min_length=None, max_length=None ) |
常用的字段为:
CharField
BooleanField
IntegerField
DecimalField
常用字段参数
-
给CharField字段类使用的参数
参数名 作用 max_length 最大长度 min_lenght 最小长度 allow_blank 是否允许为空 trim_whitespace 是否截断空白字符 -
给IntegerField字段类使用的参数
参数名 作用 max_value 最小值 min_value 最大值 -
通用参数:放在哪个字段类上都可以的
参数名 作用 required 表明该字段在反序列化时必须输入,默认True default 反序列化时使用的默认值 allow_null 表明该字段是否允许传入None,默认False validators 该字段使用的验证器【不需要了解】 error_messages 包含错误编号与错误信息的字典 label 用于HTML展示API页面时,显示的字段名称 help_text 用于HTML展示API页面时,显示的字段帮助提示信息 -
重要的两个参数字段
参数名 作用 read_only 表明该字段仅用于序列化输出,默认False write_only 表明该字段仅用于反序列化输入,默认False
标签:None,ser,max,基础,length,序列化,data,Drf From: https://www.cnblogs.com/so-shuai/p/17137234.html