Django_rest-framework1.0

序列化

1.1声明序列化器

from rest_framework import serializers
class xxxSerializer(serializers.Serializer):    	
	email = serializers.EmailField()    
	content = serializers.CharField(max_length=200)    
	created = serializers.DateTimeField()

1.2常用field类

核心参数

在这里插入图片描述

常用字段在这里插入图片描述
1.3 创建Serializer对象

定义好Serializer类后,就可以创建Serializer对象了。Serializer的构造方法为:

 Serializer(instance=None, data=empty, **kwarg)

说明:
1> 用于序列化时,将模型类对象传入instance参数
2>用于反序列化时,将要被反序列化的数据传入data参数
3>除了instance和data参数外,在构造Serializer对象时,还可通过context参数额外添加数据,如

serializer = UserSerializer(User, context={'request': request})

通过context参数附加的数据,还可以通过Serializer对象的context属性获取

data = User.objects.all() 
serializer = UserSerializer(instance=data,many=True)

如果要被序列化是包含多条数据的查询集QuerySet,可以通过添加mant=True参数补充说明

1.4 ModelSerializer

ModelSerializer类能够让你自动创建一个具有模型中相应字段的Serializer类。这个ModelSerializer类和常规的Serializer类一样,不同的是:
1>它根据模型自动生成一组字段
2>他自动生成序列化器的验证器
3>它默认简单实现了.create()方法和.update()方法

# 定义
class BookInfoSerializer(serializers.ModelSerializer):
"""图书数据序列化器"""
class Meta:
	model = BookInfo
	fields = ('id', 'btitle', 'bpub_date')
# 使用exclude可以明确排除掉哪些字段
class BookInfoSerializer(serializers.ModelSerializer):
"""图书数据序列化器"""
class Meta:
	model = BookInfo
	exclude = ('image',)
# 指明只读字段:可以通过read_only_fields指明只读字段,即仅用于序列化输出的字段
class BookInfoSerializer(serializers.ModelSerializer):
"""图书数据序列化器"""
class Meta:
	model = BookInfo
	fields = ('id', 'btitle', 'bpub_date'҅ 'bread', 'bcomment') 
	read_only_fields = ('id', 'bread', 'bcomment')
# 添加额外参数:我们可以使用extra_kwargs参数为ModelSerializer添加或修改原有的选项参数
class BookInfoSerializer(serializers.ModelSerializer):
"""图书数据序列化器"""
class Meta:
	model = BookInfo
	fields = ('id', 'btitle', 'bpub_date'҅ 'bread', 'bcomment') 
	 extra_kwargs = {            
	 'bread': {'min_value': 0, 
	 'required': True},            	
	 'bcomment': {'min_value': 0, 'required': True},        
	 }

反向序列化

# 反向序列化: 将前端传过来的数据生成对象,可以保存到数据库
        book = {'btitle': '庆余年', 'bpub_date': '2020-3-10',
                'bread': 10, 'bcomment': 30, 'bimage': 'static/1.jpg'}
        bs = BookSerializer(data=book)
        # 验证
        if bs.is_valid():
            # 保存到数据
            bs.save()
            print(bs.data)
            return Response({'code': 2, 'msg': '保存成功'})
        else:
            print(bs.errors)
            return Response({'code': 1, 'msg': bs.errors})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值