博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django Rest Framework----GenericAPIView 通用视图 GenericAPIView源码分析
阅读量:5349 次
发布时间:2019-06-15

本文共 2062 字,大约阅读时间需要 6 分钟。

一、GenericAPIView

GenericAPIView扩展了APIView,为标准列表和详细视图添加了常见的行为。

提供的每个具体通用视图都是一个GenericAPIView或多个mixin类组合在一起而构建的。

例如:

BookView视图类继承自:

ListModelMixin:用于显示所有图书

CreateModelMixin:添加一本书

GenricAPIView:继承自APIView,提供as_view()等,获取当前视图类中queryset和serializer_class ,用于给ListModelMixin和CreateModelMixin使用。

class BookView(mixins.ListModelMixin,               mixins.CreateModelMixin,               generics.GenericAPIView):    queryset = models.Book.objects.all()    serializer_class = BookModelSerializer    def get(self,request, *args, **kwargs):        return self.list(request, *args, **kwargs)    def post(self,request,*args,**kwargs):       return self.create(request,*args,**kwargs).......

二、GenericAPIView做了哪些事

1.获取queryset数据,用于所有后续的操作

def get_queryset(self):    # 断言,满足我的条件参会向下执行,否则不执行    # 所以必须视图类必须提供一个queryset,例如BookView视图类中第一行    assert self.queryset is not None, (            "'%s' should either include a `queryset` attribute, "            "or override the `get_queryset()` method."            % self.__class__.__name__    )    # 获取当前类中的queryset    queryset = self.queryset    if isinstance(queryset, QuerySet):        queryset = queryset.all()    return queryset

2. 获取当前类serializer_class  : 该用于验证和反序列化输入以及序列化输出的序列化程序类

def get_serializer_class(self):    #断言:必须满足条件才行    assert self.serializer_class is not None, (        "'%s' should either include a `serializer_class` attribute, "        "or override the `get_serializer_class()` method."        % self.__class__.__name__    )    #返回当前实例对象的serializer_class    return self.serializer_class

3. lookup_field :用于执行各个模型实例的对象查找的模型字段。默认是'pk'。

需要注意,使用超链接的API时,您需要确保双方的API意见串行类设置查找字段

url(r'books/(?P
\d+)/$',views.BookDetailView.as_view({
'get': 'retrieve','put':'update','delete':'destroy'})),

4. 分页

与列表视图一起使用时,以下属性用于控制分页。

pagination_class :分页列表结果时应使用的分页类。默认值与DEFAULT_PAGINATION_CLASS设置值相同,即'rest_framework.pagination.PageNumberPagination'。设置pagination_class=None将禁用此视图的分页。

5.过滤

filter_backends - 应该用于过滤查询集的过滤后端类列表。默认值与DEFAULT_FILTER_BACKENDS设置相同。

 

转载于:https://www.cnblogs.com/weihengblog/p/9206353.html

你可能感兴趣的文章
[工具] Sublime Text 使用指南
查看>>
Web服务器的原理
查看>>
常用的107条Javascript
查看>>
#10015 灯泡(无向图连通性+二分)
查看>>
mysql统计一张表中条目个数的方法
查看>>
ArcGIS多面体(multipatch)解析——引
查看>>
css3渐变画斜线 demo
查看>>
JS性能DOM优化
查看>>
HAL层三类函数及其作用
查看>>
Odoo 去掉 恼人的 "上午"和"下午"
查看>>
web@h,c小总结
查看>>
java编程思想笔记(一)——面向对象导论
查看>>
Data Structure 基本概念
查看>>
Ubuntu改坏sudoers后无法使用sudo的解决办法
查看>>
NEYC 2017 游记
查看>>
[搬运] 写给 C# 开发人员的函数式编程
查看>>
Python之旅Day14 JQuery部分
查看>>
core--线程池
查看>>
redux-effect
查看>>
Android轻量级的开源缓存框架ASimpleCache
查看>>