码迷,mamicode.com
首页 > 其他好文 > 详细

第三章 restframework——序列化组件

时间:2018-10-12 13:58:40      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:序列化   cts   none   序列   有序字典   分享图片   family   ali   定义   

第三章 restframework——序列化组件

 

一、django自带的序列化组件serializers

二、restframework的序列化组件Serializer

三、restframework的序列化组件ModelSerializer

四、restframework的序列化组件请求数据校验和保存功能(钩子)

五、restframework的序列化组件源码分析

 

一、django自带的序列化组件serializers

from django.core import serializers
def persons(request):
    ret = models.Person.objects.all()
    # person_list = []
    # for i in ret:
    #     person_list.append({"name":i.name,"age":i.age})
    # print(person_list)
    # import json
    # s = json.dumps(person_list)
    # print(s)
    from django.core import serializers
    s = serializers.serialize("json",ret)
    print(s)
    return HttpResponse(s)

 

二、restframework的序列化组件Serializer

先来看看django自带的cbv的json写法,然后我们再来看下restframework的写法

【django】

class PublishView(View):
    def get(self,request):
        # 方式一
        publish_list = list(Publish.objects.all().values(‘name‘,‘email‘))
        return HttpResponse(json.dumps(publish_list))
        # 方式二
        from django.forms.models import model_to_dict
        publish_list = Publish.objects.all()
        temp = []
        for obj in publish_list:
            temp.append(model_to_dict(obj))
        return HttpResponse(json.dumps(temp))
        # 方式三
        from django.core import serializers
        publish_list = Publish.objects.all()
        temp = serializers.serialize("json",publish_list)
        return HttpResponse(temp)

【restframework】

from rest_framework import serializers
from rest_framework.response import Response
# 为queryset做序列化
class PublishSerializers(serializers.Serializer):
    # 下面写的字段取决于你需要哪些字段做序列化
    name = serializers.CharField()
    email = serializers.CharField()
    # publish=serializers.CharField(source="publish.name")
    # authors=serializers.CharField(source="authors.all")
class PublishView(View): def get(self,request): 
publish_list = Publish.objects.all()
pb = PublishSerializers(publish_list, many=True)
# many = true 代表前面传入的参数是queryset对象
# pb.data是把上面PublishSerializers内写的字段转为有序字典
       
# pb = PublishSerializers(model_obj,many = false)
# many = false 代表前面传入的参数是model对象 # 默认many = false,所以如果是model对象可以不用写many
# pb.data是直接把对象所有属性转为有序字典
return Response(pb.data)

注意:

source 如果是字段,会显示字段,如果是方法,会执行方法,不用加括号(authors=serializers.CharField(source=‘authors.all‘))

如在模型中定义一个方法,直接可以在在source指定执行

准备工作

models.py

技术分享图片
from django.db import models

# Create your models here.


class Book(models.Model):
    title=models.CharField(max_length=32)
    price=models.IntegerField()
    pub_date=models.DateField()
    publish=models.ForeignKey("Publish")
    authors=models.ManyToManyField("Author")
    def __str__(self):
        return self.title

class Publish(models.Model):
    name=models.CharField(max_length=32)
    email=models.EmailField()
    def __str__(self):
        return self.name

class Author(models.Model):
    name=models.CharField(max_length=32)
    age=models.IntegerField()
    def __str__(self):
        return self.name
View Code

 

三、restframework的序列化组件ModelSerializer

 

四、restframework的序列化组件请求数据校验和保存功能(钩子)

 

五、restframework的序列化组件源码分析

 

第三章 restframework——序列化组件

标签:序列化   cts   none   序列   有序字典   分享图片   family   ali   定义   

原文地址:https://www.cnblogs.com/neymargoal/p/9777322.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!