restframework序列化使用方法
serializers.Serializer
class Userinfoserializers(serializers.Serializer): username = serializers.CharField() passwd = serializers.CharField() group = serializers.CharField(source="group.title") #使用序列化的原因: #因为在传统的前后端不分离后台返回给前端的数据类型为Queryset对象而不是可视化对象所以我们可以通过rest_framework的serializers类将Queryset对象变成我们想要的数据格式 #当source参数存在的时候会直接通过source的参数作为键到数据库取值,如果不存在则通过变量名为键取值 #当source参数不存在时,键为变量名,且通过变量名为键取值 #当source数据源明确时可以自定义变量名为响应数据的键 oooo = serializers.CharField(source=“username”) #source参数也可以为一个方法在内部会自动加上括号比如source="get_字段名_display" #也可以通过外键取值source="group.title" class Userinfo_view(APIView): def get(self,request,*args,**kwargs): #实现的原理如下通过返回的对象调用values方法返回指定的字段值 #info = models.UserInfo.objects.all().values("id","username","passwd") mdl = models.UserInfo.objects.all() #many 为传入的数据为多条的话为True 如果不是一个列表只有一条的话则为False ser = Userinfoserializers(instance=mdl,many=True) info = json.dumps(ser.data,ensure_ascii=False) return HttpResponse(info)
自定义显示
class Userinfoserializers(serializers.Serializer): username = serializers.CharField() passwd = serializers.SerializerMethodField() #此处的value为一个Queryser对象get_字段名 def get_passwd(self,value): return value.passwd class Userinfo_view(APIView): def get(self,request,*args,**kwargs): mdl = models.UserInfo.objects.all() ser = Userinfoserializers(instance=mdl,many=True) info = json.dumps(ser.data,ensure_ascii=False) return HttpResponse(info)
生成 HyperlinkedIdentityField
生成HyperlinkedIdentityField url(r"^(?P<version>[v1|v2]+)/group/(?P<group_id>\d+)$",views.Groupinfo_view.as_view(),name="group"), class Userinfoserializers(serializers.ModelSerializer): #lookup_field=此参数必须在路有中出现,view_name="group"找寻的是路由别名,也决定了他的生成格式 group = serializers.HyperlinkedIdentityField(view_name="group",lookup_field="group_id") class Meta: model = models.UserInfo fields = "__all__" class Userinfo_view(APIView): def get(self,request,*args,**kwargs): mdl = models.UserInfo.objects.all() #必填参数context={"request":request} ser = Userinfoserializers(instance=mdl,many=True,context={"request":request}) info = json.dumps(ser.data,ensure_ascii=False,) return HttpResponse(info)
serializers.ModelSerializer
#两者也可配合使用 class Userinfoserializers(serializers.ModelSerializer): class Meta: #深度控制,此处的值为多少层表默认为0 depth = 1 #0-10 model = models.UserInfo #显示所有字段 # fields = "__all__" #此处可以自定义显示的字段 fields = ["id","username","passwd","user_type","group"] #此处通过字典的方式也可以取到对应的外键的值 extra_kwarges = {"group":{"source":"group.title"},} #也可以自定义字段 class MyField(serializers.CharField): #此处接收value为Queryset对象 def to_representation(self,value): return valu
请求数据校验
class Roleser(serializers.ModelSerializer): title = serializers.CharField(min_length=3,max_length=5,error_messages={"min_length":"字数不能低于3","max_length":"字数不能大于5"}) def validate_title(self, attrs):#对指定字段进行自定义校验 print(attrs)#销售2 return attrs def validate(self, attrs):#对多个字段进行校验 print(attrs)#OrderedDict([('title', '销售2')]) return attrs
class Roles_view(APIView): def get(self,request,*args,**kwargs): obj = models.Role.objects.all() ser = Roleser(instance=obj,many=True) return Response(ser.data) def post(self,request,*args,**kwargs): ser = Roleser(data=request.data) if ser.is_valid(): ser.save() return Response("提交成功") else: return Response(ser.errors)
restframework序列化使用方法的更多相关文章
- rest-framework序列化
快速实例 Quickstart 序列化 开篇介绍: ---- 一切皆是资源,操作只是请求方式 ----book表增删改查 /books/ books /books/add/ addbook /book ...
- JavaScript表单序列化的方法详解
本文介绍下,在javascript中实现表单序列化的方法,通过实例加深理解,有需要的朋友参考下吧. 在JavaScript中,可以利用表单字段的type属性,连同name和value属性一起实现对表单 ...
- Map,List,POJO深拷贝(序列化实现)方法与注意事项
转载请注明出处,谢谢! 方法1: /*jdk >= 1.5*/ @SuppressWarnings("unchecked") public static <T> ...
- 两种序列化的方法 Serializable Parcelable
原文:https://blog.csdn.net/hacker_crazy/article/details/80840868 一.Serializable 1.Serializable 是java的序 ...
- rest-framework 序列化格式Restful API设计规范
理解RESTful架构 Restful API设计指南 理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式 ...
- 从django的序列化到rest-framework 序列化
1.利用Django的view实现返回json数据 from django.views.generic import View from goods.models import Goods class ...
- day 94 RestFramework序列化组件与视图view
一 .复习 1. CBV流程 class BookView(View): def get(): pass def post(): pass #url(r'^books/', views.BookVie ...
- django restframework 序列化
Serialization 序列化 创建表 from django.db import models from pygments.lexers import get_all_lexers from p ...
- Django restframework 序列化之 ModelSerializer 小记
首先介绍一下相关概念 序列化器(Serializer) 1. 自定义型: 继承rest_framework.serializers.Serializer 2. 模型类型: 继承rest_frame ...
随机推荐
- 毕向东_Java基础视频教程第19天_IO流(18~19)
第19天-18-IO流(流操作规律 - 1) 通过三个步骤来明确"流操作"的规律: 明确数据流的"源和目的" 源, 输入流: InputStream/Reade ...
- 对于当下国产CPU如火如荼有感
国家在国家战略层面去做国产CPU这个事情,从初衷来说是好的.国产CPU战略如果能够实现,则会大大加强我国在计算机产业领域从头到尾的话语权与技术竞争力.但是个人觉得,事情不是那么简单.我将从下面几个方面 ...
- 远程管理客户端--SCCM
远程控制客户端(设备--启动--远程控制): 1.将该用户在SCCM中赋予 远程工具操作人员 权限后,可以通过ccm控制台连接客户端,即可以使用远程控制工具 客户端设置策略设置--远程工具--管理远程 ...
- VSTO 开发
http://www.cnblogs.com/yangecnu/category/499866.html http://www.cnblogs.com/brooks-dotnet/category/2 ...
- 8086 CPU 寄存器简介
转载:http://www.cnblogs.com/BoyXiao/archive/2010/11/20/1882716.html 引子 打算写几篇稍近底层或者说是基础的博文,浅要介绍或者说是回顾一些 ...
- Django路由系统---django重点之url传递一个默认参数
django重点之url传递一个默认参数 可以利用这个特性,让2个URL映射一个函数,但是返回2个不同的HTML url(r'default_param1', views.def_param,), u ...
- Java实例---简单的超市管理系统
代码分析 Customer.java package test; public class Customer { private String name; private int customerTy ...
- 沉淀,再出发:Django的简单使用
沉淀,再出发:Django的简单使用 一.前言 在学习了python的基础语法之后,其实大家都很怀疑python的使用场景,其实python在很多场合都有很强的适应性,就比如说web开发之中使 ...
- metasploit 渗透测试笔记(meterpreter篇)
0x01 背景 meterpreter作为后渗透模块有多种类型,并且命令由核心命令和扩展库命令组成,极大的丰富了攻击方式. 需要说明的是meterpreter在漏洞利用成功后会发送第二阶段的代码和me ...
- Hadoop学习笔记---HDFS
Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.HDFS能提供高吞吐 ...