感谢alex和武沛齐老师

rest_framework中的序列化表示

from rest_framework import serializers
class RoleSerializer(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 对queryset的格式进行序列化
roles = models.Role.objects.all()
ser = RolesSerializer(instance=roles, many=True)
ret = json.dumps(ser.data, ensure_ascii=False)
return HttpResponse(ret) #方式2 单个对象
roles = models.Role.objects.all().first()
ser = RolesSerializer(instance=roles, many=False)
#ser.data 已经是完成序列化的结果了
ret = json.dumps(ser.data, ensure_ascii=False)
return HttpResponse(ret) def func(arg):
if callable(arg):
print(arg()) else:
print(arg) func(123)
func(lambda:"666") 序列化
部分总结:
1.写类
继承下面两种
class RolesSerializer(serializers.Serializer):
id = serializers.IntegerFiled()
title = serializers.CharField() class UserInfoSerializer(serializers.ModelSerializer):
class Meta:
model = models.UserInfo
#fileds = "__all__"
fields = ['id', 'username', 'password'] 2.字段
a. title = serializers.CharField(source = 'group.title')
b. title = serializers.SerializerMethodField()
class UserInfoSerializer(serializers.ModelSerializer):
rls = serializers.SerializerMethodField() #自定义显示 class Meta:
model = models.UserInfo
fields = ['id', 'username', 'password', 'rls',] #自定义方法
def get_rls(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 c.自定义类 不过用得少 视图函数中
from cmdb import models
from rest_framework import serializers #方式1 序列化
# class UserInfoSerializer(serializers.Serializer):
# username = serializers.CharField()
# password = serializers.CharField()
# xxxx = serializers.CharField(source="user_type") #source表示对应数据库的某个字段 此时就可以改变变量了 row.get_user_type_display 不可执行
# oooo = serializers.CharField(source="get_user_type_display") #对choices数据进行获取中文 可执行
#
# group = serializers.CharField(source="group.title") #foreignkey 进行.操作 跨表
# #rls = serializers.CharField(source='roles.all')
# #如果是单个表和foreignkey可以通过source去指定 不能指定manytomany
#
# rls = serializers.SerializerMethodField()#自定义显示
# def get_rls(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 #方式2 #地址 www.cnblogs.com/wupeiqi/articles/7805382.html
#方式2可以与方式1中的数据混合着使用
class UserInfoSerializer(serializers.ModelSerializer):
oooo = serializers.CharField(source="get_user_type_display")
rls = serializers.SerializerMethodField()
group = serializers.CharField(source='group.title')
class Meta:
model = models.UserInfo
#fields = "__all__" #这一步已经可以完成基本的所有数据的显示
fields = ['id','username','password','oooo','rls','group'] def get_rls(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 import json
class UserInfoView(APIView):
def get(self, request, *args, **kwargs):
users = models.UserInfo.objects.all()
ser = UserInfoSerializer(instance=users,many=True)
print(ser.data) ret = json.dumps(ser.data, ensure_ascii=False)
return HttpResponse(ret) urls.py中
from django.conf.urls import url,include
from cmdb import views
urlpatterns = [
url(r'^(?P<version>[v1|v2]+)/userinfo/$',views.UserInfoView.as_view()),
] models.py中
from django.db import models # Create your models here.
class UserGroup(models.Model):
title = models.CharField(max_length=32) class UserInfo(models.Model):
user_type_choices = (
(1,'普通用户'),
(2,'VIP'),
(3,'SVIP'),
)
user_type = models.IntegerField(choices=user_type_choices)
group = models.ForeignKey(to="UserGroup", on_delete=models.CASCADE) username = models.CharField(max_length=32, unique=True)
password = models.CharField(max_length=64) roles = models.ManyToManyField(to="Role") class UserToken(models.Model):
user = models.OneToOneField(to="UserInfo", on_delete=models.CASCADE)
token = models.CharField(max_length=64) class Role(models.Model):
title = models.CharField(max_length=32)

rest_framework 序列化篇的更多相关文章

  1. django rest_framework 序列化组件详解

    为什么要用序列化组件 当我们做前后端分离的项目,我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转成json格式,那就需要对我们从数据库拿到 ...

  2. rest_framework序列化组件

    一.Django自带的序列化组件  ==>对象序列化成json格式的字符串 from django.core import serializers from django.core import ...

  3. rest_framework序列化,反序列化

    序列化组件 from rest_framework.response import Response1.Response本质也是继承了httpresponse,比httpResponse还强大,传入一 ...

  4. Hadoop2源码分析-序列化篇

    1.概述 上一篇我们了解了MapReduce的相关流程,包含MapReduce V2的重构思路,新的设计架构,与MapReduce V1的区别等内容,今天我们在来学习下在Hadoop V2中的序列化的 ...

  5. Spark 性能相关参数配置详解-压缩与序列化篇

    随着Spark的逐渐成熟完善, 越来越多的可配置参数被添加到Spark中来, 本文试图通过阐述这其中部分参数的工作原理和配置思路, 和大家一起探讨一下如何根据实际场合对Spark进行配置优化. 由于篇 ...

  6. 【原】Kryo序列化篇

    Kryo是一个快速有效的对象图序列化Java库.它的目标是快速.高效.易使用.该项目适用于对象持久化到文件或数据库中或通过网络传输.Kryo还可以自动实现深浅的拷贝/克隆. 就是直接复制一个对象对象到 ...

  7. rest_framework序列化

    1.序列化 1)拿到queryset 2)将queryset 给序列化类 serializer = IdcSerializer(idc)    #单个对象 serializer = IdcSerial ...

  8. 【Django】rest_framework 序列化自定义替换返回值

    # 序列化设置 class PagerSerialiser(serializers.ModelSerializer): name = serializers.CharField(source=&quo ...

  9. django rest_framework Serializers 序列化组件

    为什么要用序列化组件 当我们做前后端分离的项目~~我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转成json格式,那就需要对我们从数据库拿 ...

随机推荐

  1. spring mvc拦截器interceptor

    1.  SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像123 ...

  2. 公布自己的pods到CocoaPods trunk 及问题记录

    这两天准备把之前写的一些小玩意加入到pods库中去,參考了一些资料后进行操作,实际中也遇到了一些问题,记录下来.问题及解决方案在后面. 參考内容转载例如以下: 首先更新了用trunk之后,CocoaP ...

  3. java大数类,两个不超过20位都不为0的十进制字符串相乘,华为笔试题

    import java.math.BigInteger; import java.util.*; import java.io.*; public class Main { public static ...

  4. 如何让Java写的程序,脱离Eclipse在别人的电脑上运行?

    Java程序运行,离不开JRE. 将JRE文件夹拷贝出来, 将编写程序的bin文件夹拷贝出来, 再编写一个bat文件. start jre\bin\javaw.exe -cp .\bin\ -Djav ...

  5. weboffice7

    document.all.WebOffice1.ShowToolBar = false;

  6. VS 2015 C#不能进入断点

    工程\属性\生成页面,去掉优化代码勾选.

  7. JOSN快速入门

    1.JSON介绍 (1)JSON是一种与开发语言无关的,轻量级的数据格式,全称 JavaScript Object  Notation,易于阅读和编写,语言解析和生产 (2)JSON数据类型表示 数据 ...

  8. 读取XML字符串到临时表

    DECLARE @hdoc int DECLARE @doc xml SET @doc = '<CityValueSet> <CityItem> <CityId>2 ...

  9. layui layer 弹框

    layer 这个是一个web弹层组件,挺好用的...然后项目框架是SSM... layer.open主要是用来弹出来一个iframe弹窗,然后用来展示数据也行,用来修改也行,这次记录的主要是展示,展示 ...

  10. Matplotlib 画廊

    https://matplotlib.org/gallery.html