写写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,可以重写,例如:

    1.  
      def get_serializer_class(self):
    2.  
      if self.request.user.is_staff:
    3.  
      return FullAccountSerializer
    4.  
      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('频繁发送短信')

最新文章

  1. IOS网络第七天WebView-02WebView和网页的交互2,删除大众点评多余文字,加上蒙版进度
  2. SHOI2016游记&滚粗记&酱油记
  3. Delphi 取得桌面文件夹的路径和取得我的文档的路径
  4. lazyload 分页加载
  5. [Everyday Mathematics]20150221
  6. 什么是Ajax? (转载于疯狂客的BLOG)
  7. struts2 日期标签
  8. java--九九乘法表
  9. Visual Studio 2010 使用外部代码格式化工具 AStyle
  10. 48、mysql补充
  11. TCP/IP详解 卷1 第二十章 TCP的成块数据流
  12. 【.net】在ASP.NET中,IE与Firefox下载文件名中带中文汉字的文件,文件名乱码的问题
  13. 如何访问https的网站?-【httpclient】
  14. React 入门学习笔记整理(六)—— 组件通信
  15. Java数据结构和算法(五):队列
  16. ResponderChain note
  17. 适合Eclipse Juno的UML插件
  18. IntellJ IDEA javax.servlet.ServletException 找不到javax.servlet.ServletException的类 java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
  19. 对ArrayList存放的对象,按照对象的某个属性进行排序。
  20. August 04th 2017 Week 31st Friday

热门文章

  1. bzoj1617 / P2904 [USACO08MAR]跨河River Crossing
  2. RocEDU.阅读.写作《苏菲的世界》书摘(七)
  3. 20162314 《Program Design & Data Structures》Learning Summary Of The Eighth Week
  4. labview之连接MySQL数据库
  5. zabbix负载均衡群集高可用架构
  6. 如何利用Xshell在windows与linux之间互传文件
  7. LINQ 学习路程 -- 查询操作 GroupBy ToLookUp
  8. 使用javascript模拟常见数据结构(二)
  9. 解决"No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android"错误
  10. 五句话搞定JavaScript作用域【转】