序列化:

第一版:
class RolesView(APIView):
def get(self,request,*args,**kwargs):
roles = models.Role.objects.all().values('id','title')
roles = list(roles)
#利用json.dumps将数据转换成json格式
ret = json.dumps(roles,ensure_ascii=False)
return HttpResponse(ret) 第二版:
from rest_framework import serializers class RloesSerializer(serializers.Serializer):
id = serializers.IntegerField()
title = serializers.CharField() class RolesView(APIView):
def get(self,request,*args,**kwargs):
方式一:对于[obj,obj,obj,]
roles = models.Role.objects.all()
ser = RloesSerializer(instance=roles, many=True) #多个对象 方式二:对于[obj,obj,obj,]
roles = models.Role.objects.all().first()
ser = RloesSerializer(instance=roles, many=False) #单个对象或数据 ret = json.dumps(ser.data,ensure_ascii=False)
return HttpResponse(ret) 第三版:
from rest_framework import serializers class UserInfoSerializer(serializers.Serializer):
# source是印射models里面的表的字段名
user_type = serializers.CharField(source='user_type')
# 如果字段时choices字段 可以使用source='get_字段名_display' 来显示中文
user_type_zhongwen = serializers.CharField(source='get_user_type_display')
username = serializers.CharField()
password = serializers.CharField()
#如果字段是一个Forenighkey那么可以使用 字段名加点来关联其他表的字段
gpid = serializers.CharField(source='group.id')
#如果字段是一个ManyToMany那么可以使用 字段名加点来关联所有字段
rls = serializers.CharField(source='roles.all')
#自定义显示
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 class UserInfoView(APIView):
def get(self,request,*args,**kwargs):
roles = models.UserInfo.objects.all()
ser = UserInfoSerializer(instance=roles, many=True) #多个对象 ret = json.dumps(ser.data,ensure_ascii=False)
return HttpResponse(ret)

  

第四版:
from rest_framework import serializers class UserInfoSerializer(serializers.ModelSerializer):
#反向生成url 根据路由 url(r^(?P<version>[v1|v2]+)/group/(?P<pk>\d+)$, view.UserInfoView.as_view(),'gp')
group = serializers.HyperlinkedIdentityField(view_name='gp',lookup_field='group_id',lookup_url_kwarg='pk')
user_type_zhongwen = serializers.CharField(source='get_user_type_display')
class Meta:
model = models.UserInfo
# 显示UserInfo全部字段
fields = "__all__"
# 可以自定义字段
fields = ['id','username','password','user_type_zhongwen',]
          #默认是0,大于等于1时 就会把字段的相关的Forengishkey或者ManyToMany或者OneToOne
#建议不要超过3 (0-10)
depth = 1 class UserInfoView(APIView):
def get(self,request,*args,**kwargs):
roles = models.UserInfo.objects.all()
ser = UserInfoSerializer(instance=roles, many=True) #多个对象 ret = json.dumps(ser.data,ensure_ascii=False)
return HttpResponse(ret)

  

使用第四版

1. 继承 serializers.ModelSerializer

2. class Meta:

model = models.<表名>

fields = "__all__"

3. 可以自定义字段  fields = ['id','username','password','user_type_zhongwen',]

4. depth = 1  #默认是0,大于等于1时 就会把字段的相关的Forengishkey或者ManyToMany或者OneToOne

最新文章

  1. hexo在git上搭建个人博客
  2. android:installLocation 解析
  3. ThreadPoolExecutor 分析
  4. MyEclipse中文乱码解决方法
  5. JavaScript高阶函数的应用
  6. HDU 2181 哈密顿绕行世界问题 dfs 难度:1
  7. 24C01的IIC 讀寫的c51程式
  8. jail brak 获取当前安装app列表
  9. FlappyBird开发帮助文档
  10. 源码解析之ConcurrentHashmap
  11. 《Orange‘s》Loader
  12. LeetCode--020--括号匹配(java版)
  13. Python 模块浅析
  14. db_autopwn
  15. 服务器如何打开ping命令
  16. ShaderLab
  17. Deferred Lighting
  18. ArrayList之扩容与迭代器
  19. 一个新时代的UI设计师需要具备这些技能
  20. 第十三章:基于socket.io实现即时通信

热门文章

  1. python笔记2小数据池,深浅copy,文件操作及函数初级
  2. android java.lang.IllegalArgumentException: Comparison method violates its general contract! 问题
  3. Qt 开源串口工具serialplot
  4. 插件之一:Epplus
  5. django 之(五) --- 验证码|富文本|邮箱短信
  6. 单例Bean注册表接口SingletonBeanRegistry
  7. 齐治堡垒机前台远程命令执行漏洞(CNVD-2019-20835)分析
  8. 【FFMPEG】Ubuntu上安装FFMPEG
  9. VS.左侧_蓝黄绿_竖线
  10. Spring 视图层如何显示验证消息提示