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()被调用。 '''