Django REST framework 数据库序列化集合

1,首先在setting文件之中注册 rest_framework
rest_framework 是一个应用,我们使用这个应用管理来操作数据库

INSTALLED_APPS = [
    ...
    'rest_framework',
]

2,编写视图,使用视图类来管理序列化与反序列化的查询集

from rest_framework.viewsets import ModelViewSet
from .serializers import BookInfoSerializer
from .models import BookInfo

# 继承与模型类操作的一个集合!(定义了get put delete等方法!)
class BookInfoView(viewsets.ModelViewSet):
    # 指定查询集
    queryset = BookInfo.objects.all()
    # 指定一下序列化器!按照指定的序列化器进行序列化操作!
    serializer_class = BookInfoSerializer

3,定义试图路由,在应用app之中定义路由!

router = DefaultRouter()  # 可以处理视图的路由器
router.register(r'books', views.BookInfoViewSet)  # 向路由器中注册视图集

urlpatterns += router.urls  # 将路由器中的所以路由信息追到到django的路由列表中

4,创建序列化管理文件

'''由于每个 app应用规则不一样,因此需要定义序列化也不一样!'''
from rest_framework import serializers

from booktest.models import BookInfo

'''两个自定义序列化'''

'''指定的字段表示,序列化与反序列化的显示字段'''


class BookInfoSerializer(serializers.Serializer):
    """图书数据序列化器,设置字段(先转化字段指定的类型,如果能转换,那么通过,不能就不能通过!)"""
    id = serializers.IntegerField(label='ID', read_only=True)
    btitle = serializers.CharField(label='名称', max_length=20)
    bpub_date = serializers.DateField(label='发布日期', required=False)
    bread = serializers.IntegerField(label='阅读量', required=False)
    # bcomment = serializers.IntegerField(label='评论量', required=False)
    # image = serializers.ImageField(label='图片', required=False)

    def create(self, validated_data):
        """新建"""
        return BookInfo(**validated_data)

    def update(self, instance, validated_data):
        """更新,instance为要更新的对象实例"""
        instance.btitle = validated_data.get('btitle', instance.btitle)
        instance.bpub_date = validated_data.get('bpub_date', instance.bpub_date)
        instance.bread = validated_data.get('bread', instance.bread)
        #instance.bcomment = validated_data.get('bcomment', instance.bcomment)
        return instance

class HeroInfoSerializer(serializers.Serializer):
    """英雄数据序列化器"""
    GENDER_CHOICES = (
        (0, 'male'),
        (1, 'female')
    )
    id = serializers.IntegerField(label='ID', read_only=True)
    hname = serializers.CharField(label='名字', max_length=20)
    # 需要指定 GENDER_CHOICES 类型!
    hgender = serializers.ChoiceField(choices=GENDER_CHOICES, label='性别', required=False)
    hcomment = serializers.CharField(label='描述信息', max_length=200, required=False, allow_null=True)
    # 只显示外键id
    # hbook = serializers.PrimaryKeyRelatedField(read_only=True)
    # 显示外键的 __str__ 方法
    # hbook = serializers.StringRelatedField(read_only=True)
    # 显示外键对应图书的所有信息!
    hbook = BookInfoSerializer()


'''在shell 之中使用序列化管理器,如果返回多条数据,那么就指定many=True属性!
    序列化是查询数据,反序列化是更改数据!
    每一个表都可以建一个serializer,类似Django的Form  专门用于json的处理
    首先定义字段,告诉REST框架,哪些字段(field),需要被序列化/反序列化

    如果创建序列化器对象的时候,没有传递instance实例,则调用save()方法的时候,create()被调用,相反,如果传递了instance实例,则调用save()方法的时候,update()被调用。
'''
View Code

 

 

 

转载于:https://www.cnblogs.com/shi-qi/articles/9186273.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值