[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 ...
随机推荐
- 【zheng环境准备】安装redis
1.下载源码,解压缩后编译源码 wget http://download.redis.io/release/redis-2.8.3.tar.gz tar -xzf redis-.tar.gz cd r ...
- windows下搭建docker
1.下载,双击安装,然后一路next 2.启动,然后打开docker的settings 在shared drives里勾选你想要把项目存放的盘,点击Apply(这里在windows系统下有个坑,项目只 ...
- hadoop fs 获取文件大小
du 使用方法:hadoop fs -du URI [URI …] 显示目录中所有文件的大小,或者当只指定一个文件时,显示此文件的大小.示例:hadoop fs -du /user/hadoop/di ...
- Steeltoe之Circuit Breaker篇
在分布式系统中,服务发生异常是很正常的现象.为了处理这类"例外",可以采取不同的应对策略,断路器模式即是其中一种方法.这个模式的主要特点是其可以阻断失败的级联影响,不会因为一个服务 ...
- .NET Core开发日志——视图与页面
当一个Action完成它的任务后,通常需要返回一个实现IActionResult的对象,而最常见的就是View或者ViewResult,所谓的视图对象.那么视图与最终所看到的页面之间的联系又是怎样形成 ...
- [No0000110]Git9/9-自定义Git
在安装Git一节中,我们已经配置了user.name和user.email,实际上,Git还有很多可配置项. 比如,让Git显示颜色,会让命令输出看起来更醒目: $ git config --glob ...
- Etcd+Confd实现Nginx配置文件自动管理
一.需求 我们使用Nginx做七层负载均衡,后端是Tomcat.项目采用灰度发布方式,每次项目升级,都要手动先从Nginx下摘掉一组,然后再升级这组,当项目快速迭代时,手动做这些操作显然会增加部署时间 ...
- vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。
原文来自http://note.youdao.com/share/web/file.html?id=236896997b6ffbaa8e0d92eacd13abbf&type=note 我怕链 ...
- [development][PCRE] old PCRE
介绍, man手册 txt版 http://www.pcre.org/original/pcre.txt html版 http://www.pcre.org/original/doc/html/pcr ...
- LeetCode 559 Maximum Depth of N-ary Tree 解题报告
题目要求 Given a n-ary tree, find its maximum depth. The maximum depth is the number of nodes along the ...