rest_framework-序列化-总结完结篇

#rest_framework 序列化
from rest_framework import serializers

#serilizers.Serializer serializers.ModelSerializer 两种序列化方式

class RolesSerializer(serializers.Serializer):
    id = serializers.IntegerField()
    title = serializers.CharField()

class RolesView(APIView):
    def get(self, request, *args, **kwargs):
        #方式1
        #roles = models.Role.objects.all().values(‘id‘,‘title‘)
        #roles = list(roles)
        #ret = json.dumps(roles, ensure_ascii=False)

        #方式2-1
        roles = models.Role.objects.all()
        ser = RolesSerializer(instance=roles, many=True)
        ret = json.dumps(ser.data, ensure_ascii=False)
        return HttpResponse(ret)

        #方式2-2
        roles = models.Role.objects.all().first()
        ser = RolesSerializer(instance=roles, many=False)
        ret = json.dumps(ser.data, ensure_ascii=False)
        return HttpResponse(ret)

class UserInfoSerializer(serializers.Serializer):
    username = serializer.CharField()
    password = serializer.CharField()
    user_type = serializer.IntegerField()

    #user_type = serializer.Charield(source="get_user_type_display")  #找到每一行的对象 row.user_type
                                                          # row.get_user_type_display  就可以对choices进行层级的字符
                                                          #可执行

    gp = serializers.CharField(source="group.title")  #外键group关联Group表,通过.获取Group表字段参数
    #显示 [{"username":"ljc", "password":"123", "user_type":"VIP", "gp":"A组"}]

    #多对多 manytomany 不能通过source  通过serializers.SerializerMethodField()
    roles = serializers.SerializerMethodField() #自定义显示
    def get_roles(self, row):

        role_obj_list = row.roles.all() #获取角色对象
        ret = []
        for item in role_obj_list:
            ret.append({‘id‘:item.id, ‘title‘:item.title})
        return ret

class UserInfoView(APIView):
    def get(self, request, *args, **kwargs):
        users = models.UserInfo.objects.all()
        ser = UserInfoSerializer(instance=users, many=True)
        ret = json.dumps(ser.data, ensure_ascii=False)

        return HttpResponse(ret)

#方式3
class UserInfoSerializer(serializers.ModelSerializer):
    user_type = serializer.Charield(source="get_user_type_display")  #混合使用

    roles = serializers.SerializerMethodField() #自定义显示
    class Meta:
        model = models.UserInfo
        #fields = "__all__"  全部自动生成
        #fields = [‘id‘, ‘username‘, ‘password‘] #自定义
        #fields = [‘id‘, ‘username‘, ‘password‘, ‘user_type‘]
        fields = [‘roles‘] #复杂的

        def get_roles(self, row):

            role_obj_list = row.roles.all() #获取角色对象
            ret = []
            for item in role_obj_list:
                ret.append({‘id‘:item.id, ‘title‘:item.title})

class UserInfoView(APIView):
    def get(self, request, *args, **kwargs):
        users = models.UserInfo.objects.all()
        ser = UserInfoSerializer(instance=users, many=True)
        ret = json.dumps(ser.data, ensure_ascii=False)

        return HttpResponse(ret)

#小清新版
class UserInfoSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.UesrInfo
        fields = "__all__"
        depth = 1  #这个就可以将所有的数据都显示了  默认为0 只是关联本表的数据 depth最好0-4层就好了
                   #表与表之间的manytomany onetoone foreignkey 表示一层 第二个表再关联 就2层  连表操作
class UserInfoView(APIView):
    def get(self, request, *args, **kwargs):

        users = models.UserInfo.objects.all()
        ser = UserInfoSerializer(instance=users, many=True)

        ret - json.dumps(ser.data, ensure_ascii=False) #ensure_ascii=False 显示中文
        return HttpResponse(ret)

原文地址:https://www.cnblogs.com/Liang-jc/p/9399024.html

时间: 2024-08-03 02:29:46

rest_framework-序列化-总结完结篇的相关文章

不就是抽个血吗,至于么-jQuery,Linux完结篇

hi 趁着周一去抽血化验,真开心...下午报告才出来,不过早上来了就开始各种晕菜,叫错名字,说错话.....至于么.. 还有在教研室的30天就可以肥家了,凯森凯森.今天不想干活(哪天想干过我就问问),学学jquery吧. 1.jQuery 十.UI型插件 10.1 拖曳插件——draggable 拖曳插件draggable的功能是拖动被绑定的元素,当这个jQuery UI插件与元素绑定后,可以通过调用draggable()方法,实现各种拖曳元素的效果,调用格式如下: $(selector). d

ASP.NET 5系列教程(七)完结篇-解读代码

在本文中,我们将一起查看TodoController 类代码. [Route] 属性定义了Controller的URL 模板: [Route("api/[controller]")] 所有符合该模板类型的HTTP 请求都会被路由到该controller.在本例中, 路由的命名规范为对应Controller 的前缀,对于TodoController 类,路由模板为 “api/todo”. HTTP 方法 [HttpGet].[HttpPost]和[HttpDelete] 属性定义为 co

Java工程师学习指南(完结篇)

Java工程师学习指南 完结篇 先声明一点,文章里面不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦. 因为笔者还只是一名在校生,所以写的内容主要还是针对Java初学者或者接触Java后端不久的朋友,不适用于已经工作多年的Java大佬们.所以本文中的方法不一定适合所有人,如有错误还请谅解. 本期的内容是系列文章的最后一部分内容了.这个系列可能还有很多东西没有说清楚,也有很多内容被忽略了.但是这些内容也确实是笔者结合自己经验

从无到有写一个运维APP(三)完结篇

前言:自己的挖的坑还得填,此篇为完结篇,环境的搭建参考第一篇从无到有写一个运维APP(一),至于第二篇就跳过吧,写个APP没那么复杂.由于自己现在无业游民,所以没有什么现成的环境,环境就随便找个公网的..再者当下的完成度应该算不上一个完整的APP,但是作为参考,依瓢画葫芦绝对足够了,如果等完整产品,可能得等一段时间了,下面的是该项目的地址. 项目地址: https://github.com/youerning/MyApp(star一下呗) 效果图如下 文章目录: 准备工作 代理 页面框架 获取数

DTRACE简介之完结篇3

https://blogs.oracle.com/swan/entry/dtrace%E7%AE%80%E4%BB%8B_3 DTRACE简介之完结篇 By samwan on 四月 13, 2007 已经有好长一段时间没有更新blog了,不是我懒,确实是这段时间太忙.工作加上生活,算了,不找借口了,还是来把DTRACE简介作个完结吧.本来开始写的时候只准备用一篇文章来描述,等真正写出来就发现,不行了,Dtrace实在是太强大了,即便是加上今天的,也没有完全讲到,遗漏的地方就只有请各位看官自己去

SpringMVC学习系列(12) 完结篇 之 基于Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现

到这里已经写到第12篇了,前11篇基本上把Spring MVC主要的内容都讲了,现在就直接上一个项目吧,希望能对有需要的朋友有一些帮助. 一.首先看一下项目结构: InfrastructureProjects:是抽取出的基础项目,主要封装了一些通用的操作. SpringMVC3Demo:就是管理系统所在的项目. WeiXinAPI:是之前做微信管理平台测试时封装一些操作,如果不需要把该项目移除即可. 注:项目的前端UI框架用的是国外的一个基于Bootstrap框架的开发的Demo,如不需要替换为

第18完结篇-JAVA XML

第18完结篇-JAVA XML 每篇一句 :我们不缺方法,缺的是一往无前的决心和魄力 初学心得: 我们应该从中吸取教训,而不是累积伤痛 (笔者:JEEP/711)[JAVA笔记 | 时间:2017-05-21| JAVA XML ] 1.什么是XML Extensible Markup Language:翻译过来为可扩展标记语言 Xml技术是w3c组织发布的,目前推荐遵循的是W3C组织于2000发布的XML1.0规范 在XML语言中,它允许用户自定义标签 一个标签用于描述一段数据:一个标签可分为

hostapd wpa_supplicant madwifi详细分析(十四)——完结篇

注:这篇文章不谈技术 查看了一下<hostapd wpa_supplicant madwifi详细分析>系列文章,断断续续更新到现在,发现中间的持续时间都快要两年了.记得那时候刚毕业到公司,组长叫我看项目的无线部分代码,自己稀里糊涂的看了一个月,组长问我: vap是怎么创建的?sta和AP是怎么建立连接的?wds是怎么工作的?WPS中PIN和PUSHBUTTON的区别是什么?我们DUT中几种加密方式是怎么实现的?hostapd是用来干什么的? 这些问题把我问的瞠目结舌,十分羞愧,感觉自己花了一

怒学Python——完结篇——I/O

好吧,没想到居然这么快,才两天我就把入门看完了,当然只是入门,以后如果用到,会把那些各个类型的细化都总结一下例如数学函数,或者总结一下一些框架的应用如Scarpy(爬虫框架,听着就很兴奋呢,很多人都是了解有,但是没用过......),笔者写完这段暂时先开心的看电影去,回学校再说. Python的屏幕I/O:如果是交互式编程,直接输入就好,这里的是在脚本式编程才用到,用到的方法是input和raw_input,下面给出例子 #!/usr/bin/python print raw_input() #

《程序员的呐喊》读后感,完结篇

前50页也写过: http://blog.csdn.net/wide288/article/details/30112009 有人讲五号字是在网上用的最舒服的字号,但对我像我一样的近视生来说,大点再大点(包扩屏幕)才是最好的. 花了些时间读完了,本书的前面几十页差点让我失望,不过好在后面越读越精彩. 面试,吐槽,对各个公司的点评,代码方面,管理方面.都很有趣. 本书,字少,页数少,版面小. 我想这就是它没有<黑客与画家>有名的原因吧. 从书中,也从我所在公司工作中,我体会到了,需要什么.怎样会