写写Django中DRF框架概述以及序列化器对象serializer的构造方法以及使用
写写Django中DRF框架概述以及序列化器对象serializer的构造方法以及使用
一.了解什么是DRF
DRF: Django REST framework
Django REST framework 框架是一个用于构建Web API 的强大而又灵活的工具。
通常简称为DRF框架 或 REST framework。
DRF框架是建立在Django框架基础之上,由Tom Christie大牛二次开发的开源项目。
二.DRF的特点
提供了定义序列化器Serializer的方法,
可以快速根据 Django ORM 或者其它库自动序列化/反序列化;
提供了丰富的类视图、Mixin扩展类,简化视图的编写;
丰富的定制层级:函数视图、类视图、视图集合到自动生成 API,满足各种需要;
多种身份认证和权限认证方式的支持;
内置了限流系统;
直观的 API web 界面;
可扩展性,插件丰富
三.serializer对象的构建
Serializer的构造方法为:
Serializer(instance=None, data=empty, **kwarg)
说明:
1)用于序列化时,将模型类对象传入instance参数
2)用于反序列化时,将要被反序列化的数据传入data参数
3)除了instance和data参数外,在构造Serializer对象时,还可通过context参数额外添加数据,如
serializer = AccountSerializer(account, context={'request': request})
通过context参数附加的数据,可以通过Serializer对象的context属性获取。
四.通关context属性获取参数的具体用法:
引入视图基类GenericAPIView,继承自APIVIew
,主要增加了操作序列化器和数据库查询的方法.
提供的关于序列化器使用的属性与方法
属性:
serializer_class 指明视图使用的序列化器
方法:
get_serializer_class(self)
返回序列化器类,默认返回
serializer_class
,可以重写,例如:- def get_serializer_class(self):
- if self.request.user.is_staff:
- return FullAccountSerializer
- return BasicAccountSerializer
get_serializer(self, args, *kwargs)
返回序列化器对象,主要用来提供给Mixin扩展类使用,如果我们在视图中想要获取序列化器对象,也可以直接调用此方法。
注意,该方法在提供序列化器对象的时候,会向序列化器对象的context属性补充三个数据:request、format、view,这三个数据对象可以在定义序列化器时使用。
request 当前视图的请求对象
- view 当前请求的类视图对象
- format 当前请求期望返回的数据格式
- 通过一段伪代码表现context获取参数数据
# 判断用户是否在60s内使用同一个手机号码获取短信,mobile为手机号。通过context来获取当前类视图对象,通过kwargs来获取mobile。
mobile = self.context['view'].kwargs['mobile']
send_flag = redis_conn.get('send_flag_%s' % mobile)
if send_flag:
raise serializers.ValidationError('频繁发送短信')
最新文章
- IOS网络第七天WebView-02WebView和网页的交互2,删除大众点评多余文字,加上蒙版进度
- SHOI2016游记&;滚粗记&;酱油记
- Delphi 取得桌面文件夹的路径和取得我的文档的路径
- lazyload 分页加载
- [Everyday Mathematics]20150221
- 什么是Ajax? (转载于疯狂客的BLOG)
- struts2 日期标签
- java--九九乘法表
- Visual Studio 2010 使用外部代码格式化工具 AStyle
- 48、mysql补充
- TCP/IP详解 卷1 第二十章 TCP的成块数据流
- 【.net】在ASP.NET中,IE与Firefox下载文件名中带中文汉字的文件,文件名乱码的问题
- 如何访问https的网站?-【httpclient】
- React 入门学习笔记整理(六)—— 组件通信
- Java数据结构和算法(五):队列
- ResponderChain note
- 适合Eclipse Juno的UML插件
- IntellJ IDEA javax.servlet.ServletException 找不到javax.servlet.ServletException的类 java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
- 对ArrayList存放的对象,按照对象的某个属性进行排序。
- August 04th 2017 Week 31st Friday
热门文章
- bzoj1617 / P2904 [USACO08MAR]跨河River Crossing
- RocEDU.阅读.写作《苏菲的世界》书摘(七)
- 20162314 《Program Design &; Data Structures》Learning Summary Of The Eighth Week
- labview之连接MySQL数据库
- zabbix负载均衡群集高可用架构
- 如何利用Xshell在windows与linux之间互传文件
- LINQ 学习路程 -- 查询操作 GroupBy ToLookUp
- 使用javascript模拟常见数据结构(二)
- 解决";No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android";错误
- 五句话搞定JavaScript作用域【转】