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 ...
随机推荐
- Python 多线程、多进程 (三)之 线程进程对比、多进程
Python 多线程.多进程 (一)之 源码执行流程.GIL Python 多线程.多进程 (二)之 多线程.同步.通信 Python 多线程.多进程 (三)之 线程进程对比.多线程 一.多线程与多进 ...
- Installing Fonts programatically C#
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 2017 SCNUCPC 解题报告
校内赛题目.解题思路.参考代码一览 A. Blackstorm's Blackstore Problem Description Blackstorm is going to open a black ...
- github上值得关注的前端项目【转】
今天突然看到了这些资源,所以就转载过来了,虽然是2015年的,但是可以看一下 综合/资源 frontend-dev-bookmarks 一个巨大的前端开发资源清单.star:15000 front-e ...
- CSS--居中方式总结
一.水平居中方法 1.行内元素.字体的水平居中 1.对于行内元素(display值为inline或inline-block都可以)或者字体:父元素添加css规则:text-align:center; ...
- 最新安全狗 apache v4.0 sql注入 bypass
前言 最近没事学习一下 waf 的 bypass , 本文介绍下 bypass 安全狗的笔记.个人感觉 bypass 的总思路(正则匹配型 waf)就是利用各种语法特性来逃避正则(当然要保证语法正确性 ...
- mysqlclient and mysql-python安装出错方法
Collecting mysql-python Using cached https://files.pythonhosted.org/packages/a5/e9/51b544da85a36a68d ...
- Centos7安装搭建Bugzilla 5.0
1.安装准备: Centos7保证网络连通,如果网络不能连通,可通过配置yum源使用代理服务. vim /etc/yum.conf # The proxy server - proxy server: ...
- 4.2Python数据处理篇之Matplotlib系列(二)---plt.scatter()散点图
目录 目录 前言 (一)散点图的基础知识 (二)相关性的举例 ==1.正相关== ==1.负相关== ==1.不相关== (三)实战项目以一股票的分析 目录 前言 散点图是用于观测数据的相关性的,有正 ...
- 第 16 章 C 预处理器和 C 库(可变参数:stdarg.h)
/*------------------------------------------------- varargs.c -- use variable number of arguments -- ...