day87
分页器
PageNumberPagination(普通分页器)
说明:
配置分页器的中最大显示个数(也可在setting中做全局配置)
page.page_size = 2
REST_FRAMEWORK = {
# 每页显示两条
'PAGE_SIZE': 2,
}
配置地址栏中的地址(http://127.0.0.1:8001/books/?page=2)对应最后的page
page.page_query_param = 'page'
指定当前页显示多少条
page.page_size_query_param = 'size'
限制最大页数
page.max_page_size = 6
class Book(ViewSetMixin, APIView):
def get_all(self, request):
db_books = models.Books.objects.all()
page = PageNumberPagination()
page.page_size = 2
page.page_query_param = 'page'
page.page_size_query_param = 'size'
page.max_page_size = 6
book_page = page.paginate_queryset(db_books, request, view=self)
books_ser = myser.BookSerializers(book_page, many=True)
return Response(books_ser.data)
LimitOffsetPagination(偏移分页器)
说明:
每页显示的条数
default_limit = api_settings.PAGE_SIZE
标杆值
offset_query_param = 'offset'
往后偏移多少
limit_query_param = 'limit'
每页显示最大的条数
max_limit = None
注:要取的条数,如果超过了,还剩多少,就显示多少
from rest_framework.pagination import LimitOffsetPagination class Book(ViewSetMixin, APIView):
def get_all(self, request):
db_books = models.Books.objects.all()
page = LimitOffsetPagination()
page.default_limit = 3
page.offset_query_param = 'offset'
page.max_limit = 3
book_page = page.paginate_queryset(db_books, request, view=self)
books_ser = myser.BookSerializers(book_page, many=True)
return Response(books_ser.data)
CursorPagination(加密分页器-查询速度很快)
说明:
按id排序
page.ordering = 'nid'
查询的key值
cursor_query_param = 'cursor'
每页显示多少条
page_size = api_setting.PAGE_SIZE
class Book(ViewSetMixin, APIView):
def get_all(self, request):
db_books = models.Books.objects.all()
page = CursorPagination()
# 设置根据数据库中哪个字段排序
page.ordering = 'id'
book_page = page.paginate_queryset(db_books, request, view=self)
books_ser = myser.BookSerializers(book_page, many=True)
# return Response(books_ser.data)
return page.get_paginated_response(books_ser.data)
使用总结:
生成一个对象普通,偏移,加密)
***重点:可以修改对象的属性
-ret = 对象.paginate_queryset(book_list,request,self)
-丢到序列化类中,完成序列化
-最后返回
版本控制
基于url的正则方式:URLPathVersioning(/v1/users/)
基于url的get传参方式:QueryParameterVersioning(users?version=v1)
基于 accept 请求头方式:AcceptHeaderVersioning(Accept: application/json; version=1.0)
局部使用:
versioning_class = URLPathVersioning
全局使用:
REST_FRAMEWORK = {
'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.QueryParameterVersioning',
'DEFAULT_VERSION': 'v1', # 默认版本(从request对象里取不到,显示的默认值)
'ALLOWED_VERSIONS': ['v1', 'v2'], # 允许的版本
'VERSION_PARAM': 'version' # URL中获取值的key
}
URLPathVersioning示例
路由配置:
urlpatterns = [
url(r'^(?P<version>[v1|v2]+)/books/', views.Book.as_view({'get': 'get_all'}), name='ttt'),
]
视图函数:
from rest_framework.versioning import URLPathVersioning class Book(ViewSetMixin, APIView):
versioning_class = URLPathVersioning
def get_all(self, request, version):
db_books = models.Books.objects.all()
print(request.version)
reverse_url = request.versioning_scheme.reverse('ttt', request=request)
print(reverse_url)
page = PageNumberPagination()
page.max_page_size = 6
book_page = page.paginate_queryset(db_books, request, view=self)
books_ser = myser.BookSerializers(book_page, many=True)
return page.get_paginated_response(books_ser.data)
day87的更多相关文章
- python全栈开发day87~91-整个流程梳理、CRM功能、知识点梳理
1.流程 1. stark组件 1. 启动 2.注册 3.url设计 4.视图函数设计 1.展示数据头 2.展示数据 3.list_display功能实现 4.list_display_links 功 ...
- python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页)
一.ajax登录示例 新建项目login_ajax 修改urls.py,增加路径 from app01 import views urlpatterns = [ path('admin/', admi ...
- day87:luffy:结算页面积分&支付宝接口
目录 1.积分 2.支付 1.积分 1.关于积分的表结构 1.在user表中添加credit字段 + 设计一个积分的表结构 user/models.py class User(AbstractUser ...
- 10.15仿admin开发stark组件(一)
2018-10-15 12:28:50 越努力,越幸运!永远不要高估自己! 低调做人,高调做事! 明天开stark项目!! admin 参考连接: http://www.cnblogs.com/yua ...
- Python 之反射和普通方式对比(模拟Web框架)
先模拟一个web页面的选择不同输出不同 vim day8-7.py #!/usr/bin/python # -*- coding:utf-8 -*- import home import accoun ...
- 老男孩Python高级全栈开发工程师三期完整无加密带课件(共104天)
点击了解更多Python课程>>> 老男孩Python高级全栈开发工程师三期完整无加密带课件(共104天) 课程大纲 1.这一期比之前的Python培新课程增加了很多干货:Linux ...
- 国内某Python大神自创完整版,系统性学习Python
很多小伙伴纠结于这个一百天的时间,我觉得完全没有必要,也违背了我最初放这个大纲上来的初衷,我是觉得这个学习大纲还不错,自学按照这个来也能相对系统的学习知识,而不是零散细碎的知识最后无法整合,每个人的基 ...
- 22期老男孩Ptython全栈架构师视频教程
老男孩Ptython全栈架构师视频教程 Python最新整理完整版22期视频教程 超60G课程容量<ignore_js_op> <ignore_js_op> <ignor ...
随机推荐
- Centos 7.x 安装 Docker-ce
Centos 下安装 Docker-ce CentOS 7.0, CentOS 7.2: cat > /etc/yum.repos.d/docker-main.repo << -'E ...
- 自定义基于jquery竖向瀑布流插件
公司新项目做了一个关于图片的板块,网上找了一些瀑布流插件都不是很适合自己,于是就自己造轮子写一个,并封装成插件github 于是就想分享一下,主要是为了更好的学习与记忆. 如果大家进来了,希望能给我g ...
- 配置Synwrite作为Python的IDE
先建立批处理 建立SynPython.bat ::Synwrite call Python to compile file ::Set Path @ set PATH=H:\XPprogram\Cod ...
- onSaveInstanceState场景
需要注意的是, onSaveInstanceState()方法并不是一定会被调用的, 因为有些场景是不需要保存状态数据的. 比如用户按下BACK键退出activity时, 用户显然想要关闭这个acti ...
- Android View体系(三)属性动画
上一篇文章讲了View滑动的六种方法,其中一种是使用动画,这篇文章我们来讲一讲动画的其中一种:属性动画. 1.android视图动画和属性动画 视图动画我们都了解,它提供了AlphaAnimation ...
- OkHttp封装之后使用
代码都封装好了,上层Activity如何调用呢? 1.依赖 如果是android studio开发支持在线依赖(我已经把项目添加到jcenter上): compile 'com.ansen.http: ...
- 你不可不知的Java引用类型之——弱引用
定义 弱引用是使用WeakReference创建的引用,弱引用也是用来描述非必需对象的,它是比软引用更弱的引用类型.在发生GC时,只要发现弱引用,不管系统堆空间是否足够,都会将对象进行回收. 说明 弱 ...
- OneAPM大讲堂 | 谁更快?JavaScript 框架性能评测
文章系国内领先的 ITOM 管理平台供应商 OneAPM 编译呈现. 网页性能是一个丰富且又复杂的话题.在本帖中,我们会将讨论的范围局限在前端 JavaScript 框架上,探究相对于另外一种框架而言 ...
- char/varchar/nvarchar的区别
原文:https://blog.csdn.net/w516162189/article/details/78914035 我们在设计数据库的时候,需要根据需求场景选择合适的字段类型,对数据的执行效率有 ...
- CentOS7查询系统版本内核信息
1. 查看版本号 查看CentOS的版本号命令: [root@localhost ~]# cat /etc/centos-releaseCentOS Linux release 7.4.1708 (C ...