zoukankan      html  css  js  c++  java
  • django Rest Framework----序列化

    一、手动序列化

    class BookView(APIView):
        '''
            构建数据结构
            [{"title": "go"}, {"title": "java"}, {"title": "python"}, {"title": "c++"}]
        '''
        def get(self,request):
            book_list = models.Book.objects.all()
            tmp=[]
            for book_obj in book_list:
                tmp.append({
                    'title':book_obj.title
                })
    
            return HttpResponse(json.dumps(tmp))
    
        def post(self,request):
            return HttpResponse('post....')

    model_to_dict():将对象转化成字典的形式:

    [{"id": 1, "title": "go"}, {"id": 2, "title": "java"}, {"id": 3, "title": "python"}, {"id": 4, "title": "c++"}]

    from django.forms.models import model_to_dict
    class BookView(APIView):
        def get(self,request):
            book_list = models.Book.objects.all()
            tmp=[]
            for book_obj in book_list:
                tmp.append(model_to_dict(book_obj))
    
            return HttpResponse(json.dumps(tmp))

    mode_to_dict()还支持一些参数:

    def model_to_dict(instance, fields=None, exclude=None):
        pass
    
    instance:queryset中每一个实例对象
    fields:表示一个可选列表,如果提供则返回的dict中将只包含指定的字段
    exclude:如果提供,则将字段排除在返回的dict中,即使fields包含它

    二、使用django中的serialize

    serialize的优点:它可以对queryset进行序列化。

    序列化后的结果:
    [{"model": "bookmanage.book", "pk": 1, "fields": {"title": "go"}}, {"model": "bookmanage.book", "pk": 2, "fields": {"title": "java"}}, {"model": "bookmanage.book", "pk": 3, "fields": {"title": "python"}}, {"model": "bookmanage.book", "pk": 4, "fields": {"title": "c++"}}]
    from django.shortcuts import render,HttpResponse
    from rest_framework.views import APIView
    from bookmanage import models
    from django.core.serializers import serialize
    
    class BookView(APIView):
    def get(self,request): result = serialize('json',models.Book.objects.all()) return HttpResponse(result)

    serialize:提供了将django模型翻译成其他格式的机制,serialize函数的参数是序列化数据的格式(请参阅序列化格式)和 QuerySet序列化。

    三、使用REST框架序列化

    使用REST框架序列化优点:可以把queryset序列化,也支持反序列化成queryset

    创建Serializer类

    首先我们需要提供一种序列化和反序列化

  • 相关阅读:
    栅栏与自由
    如何种玉米和黄豆
    除了CRUD也要注意IO
    奶糖测试
    看你知道不知道VB6的模块之间循环关系
    [zz]C++类模板
    [zz]C++中std::tr1::function和bind 组件的使用
    [zz]c/c++一些库
    [zz] Python性能鸡汤
    [zz]Linux 下 socket 编程示例
  • 原文地址:https://www.cnblogs.com/weihengblog/p/9198220.html
Copyright © 2011-2022 走看看