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 ...
随机推荐
- 获取url参数的方法(web)
//获取url参数的方法(web) function GetQueryString(name) { var reg = new RegExp("(^|&)" + n ...
- SoapUI 访问代理设置
SoapUI 访问代理设置 by:授客 QQ:1033553122 问题描述: 运行SoapUI时,发现接口访问不通,如下图,提示"Connection to http://127.0.0. ...
- Linux 学习笔记之超详细基础linux命令 Part 7
Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 6----------------- ...
- spring 引用Bean的属性值
引用Bean的属性值 从Spring3.0开始,可以通过#{beanName.beanProp}的方式方便地引用另一个bean的属性值1.不需要使用PropertyPlaceholderConfigu ...
- ORACLE11g下如何利用SQL DEVELOPER连接上数据库
最近在学习数据库的相关内容,在sqlplus敲了几天命令行窗口后,想尝试一下用sql developer 连接上数据库但一直没有实现.在网上查询了相关资料后现在终于弄好了,就来写下此篇博文与大家分享! ...
- Apache与Tomcat有什么关系和区别
Apache 和 Tomcat 都是web网络服务器,两者既有联系又有区别,在进行HTML.PHP.JSP.Perl等开发过程中,需要准确掌握其各自特点,选择最佳的服务器配置. Apache是web服 ...
- MSSQL清理所有用户数据库日志(SQLSERVER2008)
USE [master]; SET NOCOUNT ON; )=''; )=''; DECLARE @clearSql VARCHAR(MAX)=''; ; ,),TMP_WHILE_FLAG, T. ...
- python第五十七天------补上笔记
direct_client:广播接收 #!/usr/bin/env python #_*_coding:utf-8_*_ import pika,time,sys connection = pika. ...
- CSS:float: right 靠右换行的解决方法
1.float: right的使用用法:使用html代码<span style="float: right">*****</SPAN>,其中*****就是你 ...
- 查看tomcat项目中,具体占用cpu高的线程。
1.查看主进程占用cpu高: 此处主进程:27823 ~]# top top - :0: up days, :, 3 users, load average: 13.12, 13.31, 13.23 ...