[django]drf知识点梳理-分页
msyql分页 limit offset
https://www.cnblogs.com/iiiiiher/articles/8846194.html


django自己实现分页
https://www.cnblogs.com/iiiiiher/articles/9219935.html

def index(request):
# 分页算法
# 1 0-10
# 2 10-20
per_page = 10
cur_page = int(request.GET.get("p"))
start = (cur_page - 1) * per_page
end = cur_page * per_page
# 页码
page_num = len(user_list) // per_page
##上一页下一页
if cur_page > 1:
prev_page = cur_page - 1
else:
prev_page = 1
if cur_page < page_num:
next_page = cur_page + 1
else:
next_page = page_num
return render(request, 'app01/index.html',
{'user_list': user_list[start:end], 'page_num': range(1, page_num + 1), 'prev_page': prev_page,
'next_page': next_page})
django自带的Pagination

https://blog.csdn.net/Yort2016/article/details/73551274
def index(request):
print(request.path) # /app01/
print(request.get_full_path()) # /app01/?name=maotai&age=22
# for i in range(10):
# Article.objects.create(title='t%s' % i, content='content%s' % i)
# print(Article.objects.all()[1:5].query.__str__())
all_article = Article.objects.all()
paginator = Paginator(all_article, 2)
page = request.GET.get('page', '1') # 默认让显示第一页
page_obj = paginator.page(page)
print(page_obj)
return render(request, 'app01/index.html', {'page_obj': page_obj})
index.html
<div>
{% for foo in page_obj %}
<li>{{ foo }}</li>
{% endfor %}
</div>
<div class="pagination">
<span class="page-links">
{% if page_obj.has_previous %}
<a href="{{ request.path }}?page={{ page_obj.previous_page_number }}">previous</a>
{% endif %}
<span class="page-current">
Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
</span>
{% if page_obj.has_next %}
<a href="{{ request.path }}?page={{ page_obj.next_page_number }}">next</a>
{% endif %}
</span>
</div>
rest_framework的分页Pagination配置
配置分页-使用系统自带的分页类
全局配置: 给所有的model都分页
https://www.django-rest-framework.org/api-guide/pagination/

rest_framework里settings里教你怎么配

- settings里设置rest_framework模块的配置


- rest_framework的pagination.py
class PageNumberPagination(BasePagination):
"""
A simple page number based style that supports page numbers as
query parameters. For example:
http://api.example.org/accounts/?page=4
http://api.example.org/accounts/?page=4&page_size=100
class LimitOffsetPagination(BasePagination):
"""
A limit/offset based style. For example:
http://api.example.org/accounts/?limit=100
http://api.example.org/accounts/?offset=400&limit=100
...
设置自己的settings.py
REST_FRAMEWORK = {
'PAGE_SIZE': 1,
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination'
}
配置分页,使用自己的类
- utils.pagination.Pagination.py
from rest_framework.pagination import PageNumberPagination
class Pagination(PageNumberPagination):
def get_page_size(self, request):
try:
print(request.query_params) # <QueryDict: {'page': ['1'], 'page_size': ['-10']}>
page_size = int(request.query_params.get("page_size", -1))
# 如果前端传来的page_size小于0, 则取settings.py的PAGE_SIZE的值
if page_size < 0:
return self.page_size # 这个是settings.py里的PAGE_SIZE的值
# 如果前端传来的page_size大于0, 则用前端传来的
return page_size
except:
pass
return self.page_size
- settings.py里的配置
REST_FRAMEWORK = {
'PAGE_SIZE': 1,
# 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'DEFAULT_PAGINATION_CLASS': 'utils.pagination.Pagination'
}
如果全局中某一个model不想分页咋办?
views.py里设置下
pagination_class = None
仅仅想给Users模型分页
- settings.py里配置
REST_FRAMEWORK = {
'PAGE_SIZE': 10,
# 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination'
}
- Users/views.py
from .pagination import Pagination
class UserViewset(viewsets.ReadOnlyModelViewSet):
'''
List:
查询用户列表
Retrieve:
查询某用户详情
'''
queryset = user.objects.all()
serializer_class = UserSerialiser
pagination_class = Pagination
分页效果及 分页存在的问题



[django]drf知识点梳理-分页的更多相关文章
- [django]drf知识点梳理-搜索
什么是搜索? 譬如http://127.0.0.1:8000/User/?username=maotai-0 可以检索出想要的. 自己实现原始的搜索 重写下get_queryset方法 class U ...
- [django]drf知识点梳理-权限
用户 - 权限 - 资源 (拥有) (绑定) django权限机制能够约束用户行为,控制页面的显示内容,也能使API更加安全和灵活:用好权限机制,能让系统更加强大和健壮 django权限控制 Djan ...
- Django DRF 分页
Django DRF 分页 分页在DRF当中可以一共有三种,可以通过setttings设置,也可也通过自定义设置 PageNumberPagination 使用URL http://127.0.0.1 ...
- Django的rest_framework的分页组件源码分析
前言: 分页大家应该都很清楚,今天我来给大家做一下Django的rest_framework的分页组件的分析:我的讲解的思路是这样的,分别使用APIview的视图类和基于ModelViewSet的视图 ...
- python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页)
一.ajax登录示例 新建项目login_ajax 修改urls.py,增加路径 from app01 import views urlpatterns = [ path('admin/', admi ...
- [独孤九剑]Oracle知识点梳理(四)SQL语句之DML和DDL
本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...
- django DRF理解
django restframework(DRF) 最近的开发过程当中,发现restframework的功能很强大,所以尝试解读了一下源码,写篇博客分享给大家,有错误的地方还请各位多多指出 视图部分 ...
- DRF 过滤排序分页异常处理
DRF 中如何使用过滤,排序,分页,以及报错了如何处理?10分钟get了~
- python 学习笔记十八 django深入学习三 分页,自定义标签,权限机制
django Pagination(分页) django 自带的分页功能非常强大,我们来看一个简单的练习示例: #导入Paginator>>> from django.core.p ...
随机推荐
- [原]NTP时间服务器简单设置
====server edit /etc/ntp.conf 添加 server 127.127.1.0 fudge 127.127.1.0 stratum 1 fudge 127.127.1.0 ...
- 前端基础开发之HTML
简介: 1.HTML是什么? htyper ...
- ELK之使用filebeat收集java运行日志
安装filebeat修改配置文件/etc/filebeat/filebeat.yml filebeat.prospectors: - type: log enabled: true #日志路径 pat ...
- [No0000BC]ADO.NET中的几个主要对象
ADO 指 ActiveX 数据对象(ActiveX Data Objects). 从一个 ASP 页面内部访问数据库的通常的方法是: 创建一个到数据库的 ADO 连接 打开数据库连接 创建 ADO ...
- Away3D引擎学习入门笔记
(1). 准备工作,一些必须知道的东西 (创建时间:2014-06-05) A.必要的开发语言基础.至少要懂点ActionScript 3.0语法(ActionScript 3.0语法及API参考), ...
- wap手机端实现上传图片流程
实现图片上传使用了WeUI uploader插件 WeUI:是一套同微信原生视觉体验一致的基础样式库,为微信Web开发量身设计 流程:图片上传用到了FileReader,FormData,用这两个基本 ...
- wpf(Application 如何创建一个事件,及其Application相关的属性)
1.如何关闭wpf程序.应用程序的关闭只有调用其shutdown方法才可以.shutdown有三种属性.OnLastWindowClose,OnMainWindowClose,OnExplicitSh ...
- web.xml中 /和/*的区别
< url-pattern>/</url-pattern> 会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url< url-patter ...
- 以CENTOS6.8系统为例部署ORACLE11g RAC和DNS配置
本文所需要的全部文档均位于文末附录中 本文章以两个节点为例进行安装 在virtual box创建虚拟机时,网卡1为桥接网卡,网卡二为仅主机模式 创建两块磁盘,模式设置为可共享,都添加到两个虚拟机中 在 ...
- Maven之基本概念及特性的基本介绍
maven最主要的概念是坐标和依赖,这是maven可以极大简化构建过程以及进行项目管理的基础. 坐标 类似于地理位置的坐标,maven的坐标也是用来标记的,不同是它是来标记maven中的不同组件,也就 ...