您现在的位置是: 网站首页 >Django >Vue+Django REST framework前后端分离生鲜电商 Django
【Vue+DRF生鲜电商】07.序列化商品分页功能
admin2019年4月24日 17:39 【Django | Python | Vue 】 1865人已围观
Vue+Django REST framework前后端分离生鲜电商简介 Vue+Django REST framework 打造前后端分离的生鲜电商项目(慕课网视频)。 Github地址:https://github.com/xyliurui/DjangoOnlineFreshSupermarket ; Django版本:2.2、djangorestframework:3.9.2。 前端Vue模板可以直接联系我拿。
### 分页功能 修改`GoodsListView`视图显示所有商品,用于之后的分页功能。 ```python class GoodsListView(generics.ListAPIView): """ 显示所有的商品列表 """ queryset = Goods.objects.all() serializer_class = GoodsSerializer ``` #### 全局分页配置 分页API可以支持以下两种方式: - 作为响应内容的一部分提供的分页链接。 - 包含在响应头中的分页链接,如内容范围或链接。 只有在使用 generic views 或 viewsets 时才会自动执行分页。如果使用常规的APIView,则需要自己调用分页API,以确保返回分页响应。请参阅mixin的源代码,`mixins.ListModelMixin` 和 `generics.GenericAPIView` 类中的示例。 分页可以通过将分页类设置为None来关闭。 REST框架API的任何全局设置都保存在一个名为`REST_FRAMEWORK`的配置字典中。访问 https://www.django-rest-framework.org/api-guide/pagination/#pagenumberpagination 可查看示例。 分页样式可以使用`DEFAULT_PAGINATION_CLASS`和`PAGE_SIZE`设置,默认这两个值都是`None`。例如,要使用内置的 限制/偏移 分页,在settings.py模块中添加以下内容: ```python # DRF配置 REST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 5 } ``` #### 单独设置分页 在`GenericAPIView`子类上,还可以设置`pagination_class`属性,以根据每个视图选择`PageNumberPagination`。如果希望修改分页样式的特定方面,则需要覆盖分页类中的一个,并设置要更改的属性。 访问 https://www.django-rest-framework.org/api-guide/pagination/#modifying-the-pagination-style 进行自定义 配置: `PageNumberPagination`类包含许多属性,可以覆盖这些属性来修改分页样式。 要设置这些属性,应该覆盖`PageNumberPagination`类,然后像上面那样启用自定义分页类。 - `django_paginator_class` - 要使用的Django Paginator类。默认是 `django.core.paginator.Paginator`,对于大多数用例来说都是可以的。 - `page_size` - 指示页面大小的数值。如果设置,则会覆盖`PAGE_SIZE`设置。默认值为与 settings.py 中`PAGE_SIZE`相同的值。 - `page_query_param` - 一个字符串值,指示分页控件使用的查询参数的名称。 - `page_size_query_param` - 如果设置,这是一个字符串值,指示查询参数的名称,允许客户端根据每个请求设置页面大小。默认为`None`,表示客户机可能无法控制请求的页面大小。 - `max_page_size` - 如果设置,这是一个数字值,指示允许的最大页面大小。只有在还设置了`page_size_query_param`时,此属性才有效。 - `last_page_strings` - 字符串值的列表或元组,指示可以与`page_query_param`一起使用的值,用于请求集合中的最终页面。默认值为 `('last',)` - `template` - 在可浏览API中呈现分页控件时使用的模板的名称。可以重写以修改呈现样式,也可以将其设置为`None`以完全禁用HTML分页控件。默认为 `"rest_framework/pagination/numbers.html"`. ```python from rest_framework import generics from rest_framework.pagination import PageNumberPagination from .models import Goods from .serializers import GoodsSerializer class GoodsPagination(PageNumberPagination): page_size = 3 # 默认每一页个数 page_size_query_param = 'page_size' page_query_param = 'p' # 参数?p=xx max_page_size = 36 # 最大指定每页个数 class GoodsListView(generics.ListAPIView): """ 显示所有的商品列表 """ queryset = Goods.objects.all() serializer_class = GoodsSerializer pagination_class = GoodsPagination ``` 访问 http://127.0.0.1:8000/goods/?format=api&p=2 可以查看第二页 ![BLOG_20190424_174309_92](/media/blog/images/2019/04/BLOG_20190424_174309_92.png "博客图集BLOG_20190424_174309_92.png") 可以指定每页大小,比如 http://127.0.0.1:8000/goods/?format=api&p=2&page_size=10 ,总的页数就发生变化了。 ![BLOG_20190424_174246_81](/media/blog/images/2019/04/BLOG_20190424_174246_81.png "博客图集BLOG_20190424_174246_81.png") #### 错误警告:UnorderedObjectListWarning `\lib\site-packages\rest_framework\pagination.py:198: UnorderedObjectListWarning: Pagination may yield inconsistent results with an unordered object_list: <class 'goods.models.Goods'> QuerySet. paginator = self.django_paginator_class(queryset, page_size)` 解决方法 方法一: 在需要进行查询的模型类中 增加`ordering`参数 ```python class Meta: # ... ordering = ['id'] ``` 方法二: 在需要进行查询的语句中增加`order_by`排序 ```python class GoodsListView(generics.ListAPIView): """ 显示所有的商品列表 """ queryset = Goods.objects.all().order_by('id') serializer_class = GoodsSerializer # ... ``` #### 去除全局分页配置 修改 settings.py ,可以取消默认分页,防止影响之后商品分类的结果 ```python # DRF配置 REST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', # 'PAGE_SIZE': 5 } ```
很赞哦! (0)
相关文章
文章交流
- emoji
当前用户
未登录,点击 登录专题目录
- 【Vue+DRF生鲜电商】01.课程结构介绍,开发环境搭建
- 【Vue+DRF生鲜电商】02.设置users、goods、trade、user_operation数据库并导入原始数据
- 【Vue+DRF生鲜电商】03.Restful API基础
- 【Vue+DRF生鲜电商】04.Vue项目结构介绍
- 【Vue+DRF生鲜电商】05.商品列表序列化普通方法
- 【Vue+DRF生鲜电商】06.DRF环境配置,使用Serializer类序列化商品列表
- 【Vue+DRF生鲜电商】07.序列化商品分页功能
- 【Vue+DRF生鲜电商】08.ViewSets & Routers显示商品列表
- 【Vue+DRF生鲜电商】09.使用DRF的filter过滤商品列表
- 【Vue+DRF生鲜电商】10.商品分类层级获取,Vue跨域请求商品分类
- 【Vue+DRF生鲜电商】11.Vue展示左侧分类、面包屑、排序、商品列表、分页
- 【Vue+DRF生鲜电商】12.用户登录之DRF Token认证登录原理和使用方法
- 【Vue+DRF生鲜电商】13.JWT用户认证原理配置,Vue登录接口调试
- 【Vue+DRF生鲜电商】14.用户注册发送短信验证码、登录字段验证
- 【Vue+DRF生鲜电商】15.用户注册使用信号量实现密码加密
- 【Vue+DRF生鲜电商】16.Vue中注册、退出功能交互
- 【Vue+DRF生鲜电商】17.DRF实现商品详情及热卖商品接口,Vue中显示商品详情和热卖
- 【Vue+DRF生鲜电商】18.用户收藏、取消收藏商品接口实现
- 【Vue+DRF生鲜电商】19.用户添加、删除收藏权限处理,根据商品id显示收藏,在Vue中实现收藏功能
- 【Vue+DRF生鲜电商】20.使用DRF自动生成文档的功能
- 【Vue+DRF生鲜电商】21.用户中心个人资料的展示,并在Vue中实现个人资料更新
- 【Vue+DRF生鲜电商】22.个人中心显示用户收藏功能,对收藏进行删除
- 【Vue+DRF生鲜电商】23.个人中心用户留言功能
- 【Vue+DRF生鲜电商】24.用户收货地址功能
- 【Vue+DRF生鲜电商】25.商品添加购物车接口功能,Vue和购物车联调
- 【Vue+DRF生鲜电商】26.使用Pycharm远程代码调试服务器Django代码
- 【Vue+DRF生鲜电商】26.订单接口功能,Vue和订单接口联调
- 【Vue+DRF生鲜电商】27.支付宝公钥,私钥,沙箱环境配置
- 【Vue+DRF生鲜电商】28.支付宝支付接口类解读,支付逻辑编辑
- 【Vue+DRF生鲜电商】29.线上服务支付宝接口和Vue联调,Django代理Vue运行
- 【Vue+DRF生鲜电商】30.首页轮播图、新品展示功能
- 【Vue+DRF生鲜电商】31.首页商品按分类显示推荐功能
- 【Vue+DRF生鲜电商】32.商品操作后计数更改,热搜榜关键字功能实现
- 【Vue+DRF生鲜电商】33.数据缓存、接口访问限速功能
- 【Vue+DRF生鲜电商】34.第三方登录(微博、qq和微信)之微博登录登录测试
- 【Vue+DRF生鲜电商】35.使用social-app-django集成第三方登录