rest_framework 序列化篇
感谢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 序列化篇的更多相关文章
- django rest_framework 序列化组件详解
为什么要用序列化组件 当我们做前后端分离的项目,我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转成json格式,那就需要对我们从数据库拿到 ...
- rest_framework序列化组件
一.Django自带的序列化组件 ==>对象序列化成json格式的字符串 from django.core import serializers from django.core import ...
- rest_framework序列化,反序列化
序列化组件 from rest_framework.response import Response1.Response本质也是继承了httpresponse,比httpResponse还强大,传入一 ...
- Hadoop2源码分析-序列化篇
1.概述 上一篇我们了解了MapReduce的相关流程,包含MapReduce V2的重构思路,新的设计架构,与MapReduce V1的区别等内容,今天我们在来学习下在Hadoop V2中的序列化的 ...
- Spark 性能相关参数配置详解-压缩与序列化篇
随着Spark的逐渐成熟完善, 越来越多的可配置参数被添加到Spark中来, 本文试图通过阐述这其中部分参数的工作原理和配置思路, 和大家一起探讨一下如何根据实际场合对Spark进行配置优化. 由于篇 ...
- 【原】Kryo序列化篇
Kryo是一个快速有效的对象图序列化Java库.它的目标是快速.高效.易使用.该项目适用于对象持久化到文件或数据库中或通过网络传输.Kryo还可以自动实现深浅的拷贝/克隆. 就是直接复制一个对象对象到 ...
- rest_framework序列化
1.序列化 1)拿到queryset 2)将queryset 给序列化类 serializer = IdcSerializer(idc) #单个对象 serializer = IdcSerial ...
- 【Django】rest_framework 序列化自定义替换返回值
# 序列化设置 class PagerSerialiser(serializers.ModelSerializer): name = serializers.CharField(source=&quo ...
- django rest_framework Serializers 序列化组件
为什么要用序列化组件 当我们做前后端分离的项目~~我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转成json格式,那就需要对我们从数据库拿 ...
随机推荐
- jdk1.8Option类
目的:为了解决一个方法返回的参数可能为空而无法传入到新的方法做参数的问题,java8产生了新的内容:Option. 定义:Option是一个可以为空的容器对象(注意本质上是个万能对象). 常用方法:1 ...
- po层和vo层中po和vo是什么意思
POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称. pojo 是Plain Old Java Ob ...
- GitBlit中出现 error: remote unpack failed: error Missing tree
clu@WASYGSHA01-1020 MINGW64 /d/ChuckLu/Git/Edenred/LISA_5.0.0.0 (local)$ git push origin preaction:p ...
- 143.vector模板库
myvector.h #pragma once #include <initializer_list> #include <iostream> using namespace ...
- Python基本语法(基于3.x)
Python的两种运行模式: 命令行模式,运行python,然后在命令行中输入python命令 程序脚本, 在命令行中输入 ./hello.py运行 Python是解释形语言,但可以通过工具打包成二进 ...
- jQuery EasyUI 右键菜单--关闭标签/选项卡
目录结构: noContextMenu.js 文件内容如下: $(function(){ //屏蔽右键菜单 $(document).bind("contextmenu", func ...
- SpringMVC-注解映射器和适配器_20190323
1 注解映射器和适配器 1.1 注解映射器spring3.1之前默认加载映射器是org.springframework.web.servlet.mvc.annotation.DefaultAnnota ...
- Codeforces Round #289 Div 2
A. Maximum in Table 题意:给定一个表格,它的第一行全为1,第一列全为1,另外的数满足a[i][j]=a[i-1][j]+a[i][j-1],求这个表格中的最大的数 a[n][n]即 ...
- js的onclick和jq的click以及on和bind的区别
onclick和click,只能静态绑定点击事件:bind的可以一次绑定多个事件(click/onmouseover等):on可以动态的绑定事件,当页面加载完成调用on即可
- HDU-5693 D Game 动态规划 两次动规
题目链接:https://cn.vjudge.net/problem/HDU-5693 题意 中文题 这个游戏是这样的,首先度度熊拥有一个公差集合{D},然后它依次写下N个数字排成一行.游戏规则很简单 ...