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格式,那就需要对我们从数据库拿 ...
随机推荐
- Spring中 @Autowired标签与 @Resource标签 的区别(转)
spring不但支持自己定义的@Autowired注解,还支持由JSR-250规范定义的几个注解,如:@Resource. @PostConstruct及@PreDestroy. 1. @Autowi ...
- 【BZOJ3270】博物馆 概率DP 高斯消元
链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...
- 上传文件 nginx 413错误
nginx : 413 Request Entity Too Large 上传文件过程发生413 Request Entity Too Large错误,翻译为请求实体过大,断定为nginx限制了请求体 ...
- 【LDA】动手实现LDA
这段时间对LDA比較感兴趣,尝试在工作中使用它.平时做想法的高速验证,都用的是"GibbsLDA++-0.2",一个c实现版本号的LDA. 这两天用c++ stl自己写了一个单机版 ...
- POJ 3368 线段树
思路: 先统计在第i个位置当前数字已经出现的次数. 维护两个数组,一个是当前位置的数字最后一次出现的位置,另一个是当前位置的数字第一次出现的位置 查找的时候分为两种情况: 没有和边界相交(意会意会)的 ...
- MEF基本概念
基本概念: Managed Extensibility Framework 或 MEF 是一个用于创建可扩展的轻型应用程序的库,在.NET 4.0发布 Container:容器,使用Compositi ...
- Shiro授权认证原理和流程
先来张图: 这是一张shiro的功能图: Authentication: 身份认证/登录,验证用户是否拥有相应的身份 Authorization: 授权/权限验证,验证某个已认证的用户是否拥有某个权限 ...
- sqlserver 恢复模式及避免日志爆满的方法
recovery simple 循环日志,空间自动回收,不可备份日志,恢复时仅能恢复到数据库备份时间点: 用于落地数据或测试环境或OLAP,不推荐用于生产OLTP 有时候distribution过大也 ...
- 转Hibernate继承
hibernate继承映射 以下测试是在mysql中进行的. 1.单表方式 Animal.java @Entity @Inheritance(strategy=InheritanceType.SING ...
- 【原创】如何使用一句SQL计算工作日天数?
现在有这样一个需求,要求计算两个日期间的工作日天数,要求除去节假日,其中节假日有一张配置表,具体的格式如下: 开始日期 结束日期 节假日类型 节假日名称 2013-08-10 2013-08-12 ...