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