django rest framework之四:GenericAPIView

一、 GenericAPIView 继承自 APIView。在此基础上加了一些东西,

在使用的时候同时还要继承 mixins.ListModelMixin,

因为 generics.GenericAPIView 没有 get、 post 等方法

from rest_framework import mixins # 导入 mixins

from rest_framework import generics # 导入 generics



class SnippetListView(mixins.ListModelMixin, generics.GenericAPIView):

    # 通过 model 获取需要的数据

    snippets = Snippet.objects.all()

    # 直接在这里引用序列化 器

    serializer_class = ReatappSerializer


    # 这里如果不写 get 方法,则在访问的时候会显示 get 方法不被允许

    def get(self, request, *args, **kwargs):

        return self.list(request, *args, **kwargs)

-------------------------

GenericAPIView 的路由那些跟 APIView 一样,只是在视图里面有所不同 。

-------------------------

二、 generics.ListAPIView 继承自 mixins.ListModelMixin 和 GenericAPIView ,

使用 ListAPIView 可以不用再重载 get 方法,路由那些跟 GenericAPIView 一样。

class SnippetListView(generics.ListAPIView):

    queryset = Snippet.objects.all()

    serializer_class = ReatappSerializer

三 、 分页

使用分页步骤 :

1.配置django的 settings.py ,所有关于 rest_framework 的配置都要写到这个对象。

REST_FRAMEWORK = {

    'PAGE_SIZE':10, # 配置分页为 10

}

配置完成后再次访问,可以看到返回的数据的格式已经有所不同,

1.页面出现了一个分页的控件

2.返回的数据里面有一个 count ,表示数据的总条数

3.next 表示 下一页的 url (包含域名),这里面可以传很多参数,比如 按什么排序、

按什么搜索等,这些关键词都会加入到这个 url 里面来。

4.results 里面才是我们之前看到的列表 数据。

5.图片里面也自动加上了域名,我们可以直接通过这个 url 获取到我们的图片

这些东西都是 GenericAPIView 帮我们完成的,这个是它继承 APIView 后做的一些扩展。

四、定制分页 【用这个方法就不需要在 django 的 settings.py 中进行配置了】

1.继承 PageNumberPagination 并实例化一个 自定义的分页

2.把这个自定义的 分页添加到 视图里面

如下 :

from rest_framework import mixins

from rest_framework import generics

from rest_framework.pagination import PageNumberPagination

# 自定义一个分页

class SnippetPagination(PageNumberPagination):

    page_size = 10 # 数据条数(默认10条,前端可以通过这个参数设置,想取多少条就取多少条)

    page_size_query_param = 'page_size'

    page_query_param = 'p' # url 中要获取哪一页对应的参数

    max_page_size = 100 # 每页最多多少条数据



class SnippetListView(generics.ListAPIView):

    queryset = Snippet.objects.all()

    serializer_class = ReatappSerializer

    pagination_class = SnippetPagination

猜你喜欢

转载自blog.csdn.net/qq_26128879/article/details/82431601
今日推荐