DRF 中的Request和Response
Request
- Request对象
- from django.http import HttpRequest 传入视图的request对象时django默认的HttpRequest对象
- from rest_framework.request import Request传入视图(继承自DRF的APIView)的request对象为扩展了HttpRequest类的Request类的对象
- rest_framework提供了Parser解析器,在接收到请求后根据Content-Type指明的数据类型进行parse解析,将解析后的类字典对象保存到Request对象
- Request对象常用属性
- request.data:类似于django中的POST,PUT等,返回解析后的请求体数据,能够解析表单类型,Json,XML等
- request.query_params:类似于django中的GET,解析url中?后面的查询字符串参数,返回数据为QueryDict
Response
- Response对象
- from django.http import HttpResponse进行序列化时,要将返回给前端的数据进行Json格式的转换或render渲染
- from rest_framework.response import Response,使用response构造响应对象时,返回的数据会被转换正符合前端要求的类型
Response(data, status=None, template_name=None, headers=None, content_type=None)
DRF 视图
-
视图概览
-
视图说明
- 两个基类
- APIView(rest_framework.views.APIView, 继承自django的View)
- 限流属性(throttle_classes )
- 权限属性(permissoin_classes)
- 认证属性(authentication_classes)
- 在APIView的类视图中还是实现get(),post()等请求
APIView与View的区别 传入到视图方法中的是REST framework的Request对象,而不是Django的HttpRequeset对象; 视图方法可以返回REST framework的Response对象,视图会为响应数据设置(render)符合前端要求的格式; 任何APIException异常都会被捕获到,并且处理成合适的响应信息; 在进行dispatch()分发前,会对请求进行身份认证、权限检查、流量控制。
- GenericAPIView(rest_framework.generics.GenericAPIView, 继承自APIView)
- 序列化器指定属性(serializer_class)
- get_serializer() 获取序列化器类
- get_serializer_class() 获取多个序列化器类
- 查询集属性(queryset )
- get_queryset() 获取视图的查询集中所有数据
- get_object() 获取查询集中的单一数据(使用lookup_field参数过滤queryset)
- 分页属性(pagination_class)
- 过滤属性(filter_backends )
- 搭配一个或多个Mixin扩展类使用
- 五个扩展类
- 两个基类
五个扩展类 | 扩展类说明 | 方法 | 方法说明 |
---|---|---|---|
CreateModelMixin | 保存数据 | create(request, *args, **kwargs) | 创建资源的视图 |
UpdateModelMixin | 更新数据 | update(request, *args, **kwargs) | 更新一个数据对象 |
DestroyModelMixin | 删除数据 | destroy(request, *args, **kwargs) | 删除一个数据对象 |
RetrieveModelMixin | 获取单一数据 | retrieve(request, *args, **kwargs) | 返回一个数据对象 |
ListModelMixin | 获取多个数据 | list(request, *args, **kwargs) | 返回多个数据对象 |
- 其他扩展子类
扩展子类 | 提供的方法 | 继承自 |
---|---|---|
CreateAPIView | 提供 post 方法 | GenericAPIView、CreateModelMixin |
ListAPIView | 提供 get 方法 | GenericAPIView、ListModelMixin |
RetireveAPIView | 提供 get 方法 | GenericAPIView、RetrieveModelMixin |
DestoryAPIView | 提供 delete 方法 | GenericAPIView、DestoryModelMixin |
UpdateAPIView | 提供 put 方法 | GenericAPIView、UpdateModelMixin |
ListCreateAPIView | 提供 get, post方法 | GenericAPIView、ListModelMixin、CreateModelMixin |
RetrieveUpdateAPIView | get、put 方法 | GenericAPIView、RetrieveModelMixin、UpdateModelMixin |
RetrieveDestoryAPIView | get、delete方法 | GenericAPIView、RetrieveModelMixin、DestoryModelMixin |
RetrieveUpdateDestoryAPIView | get、put、delete方法 | GenericAPIView、RetrieveModelMixin、UpdateModelMixin、DestoryModelMixin |