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 ...
随机推荐
- Azure Linux 虚机上配置 RAID 的常见问题及解决方案
简介 独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),简称磁盘阵列.能增强数据集成度,增强容错功能,增加处理量或容量.详情参见这篇文章. 配置 ...
- 解决WPF图片模糊最佳方法
对于图片显示模糊相信很多人都遇到过,其实,有些图片会因为垂直分辨率/水平分辨率不同而造成在WPF界面上显示出现模糊. WPF默认是96Dpi,但有些图片可能是72DPI甚至更低或更高,这样就会出现图片 ...
- [翻译] TWRPickerSlider
TWRPickerSlider https://github.com/chasseurmic/TWRPickerSlider Usage Add the dependency to your Podf ...
- 快速设置UITableView不同section对应于不同种类的cell
快速设置UITableView不同section对应于不同种类的cell 本文主要是为了写明如何在UITableView中,一个section对应于一种类型的cell,写起来不凌乱. 在不封装任何类的 ...
- Asp.Net MVC Identity 2.2.1 使用技巧(四)
使用用户管理器之用户管理 一.建立模型 1.在Models文件夹上点右键 >添加>类 类的名称自定,我用AdminViewModels命名的. 2.更改模板自建的AdminView ...
- C/S结构软件测试要点汇总
C/S结构测试要点 1.安装/卸载: 1.安装包:完整性,安装包大小是否达到要求,显示基本信息是否正确,步骤是否明确,内容是否合理. 2.首次安装: 1)是否与其他已安装的软件冲突. 2)各种杀毒 ...
- August 25th 2017 Week 34th Friday
Stop to have a rest, do not forget others still in the running. 停下来休息的时候,不要忘记别人还在奔跑. You don't need ...
- System.Buffer 以字节数组(Byte[])操作基元类型数据
1. Buffer.ByteLength:计算基元类型数组累计有多少字节组成. 该方法结果等于"基元类型字节长度 * 数组长度" , , }; , , }; , , }; Cons ...
- 外网访问用azure虚拟机搭建的网站
1.Ubuntu+Apache+PHP的环境搭建(此处省去了mysql的步骤) 在azure上搭建上述的开发环境和在本地PC搭建是一样的步骤,具体介绍请参看这里. 2.从外网访问 注意,这一步的前提是 ...
- storm集群安装
1.下载storm安装文件并解压 [root@hadoop01 soft]# wget http://mirrors.hust.edu.cn/apache/storm/apache-storm-1.1 ...