写写Django中DRF框架概述以及序列化器对象serializer的构造方法以及使用

写写Django中DRF框架概述以及序列化器对象serializer的构造方法以及使用

一.了解什么是DRFhtml

DRF: Django REST frameworkjava

Django REST framework 框架是一个用于构建Web API 的强大而又灵活的工具。python

一般简称为DRF框架 或 REST framework。web

DRF框架是创建在Django框架基础之上,由Tom Christie大牛二次开发的开源项目。redis

二.DRF的特色数据库

提供了定义序列化器Serializer的方法,框架

能够快速根据 Django ORM 或者其它库自动序列化/反序列化;函数

提供了丰富的类视图、Mixin扩展类,简化视图的编写;工具

丰富的定制层级:函数视图、类视图、视图集合到自动生成 API,知足各类须要;post

多种身份认证和权限认证方式的支持;

内置了限流系统;

直观的 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('频繁发送短信')