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知识点梳理-分页的更多相关文章

  1. [django]drf知识点梳理-搜索

    什么是搜索? 譬如http://127.0.0.1:8000/User/?username=maotai-0 可以检索出想要的. 自己实现原始的搜索 重写下get_queryset方法 class U ...

  2. [django]drf知识点梳理-权限

    用户 - 权限 - 资源 (拥有) (绑定) django权限机制能够约束用户行为,控制页面的显示内容,也能使API更加安全和灵活:用好权限机制,能让系统更加强大和健壮 django权限控制 Djan ...

  3. Django DRF 分页

    Django DRF 分页 分页在DRF当中可以一共有三种,可以通过setttings设置,也可也通过自定义设置 PageNumberPagination 使用URL http://127.0.0.1 ...

  4. Django的rest_framework的分页组件源码分析

    前言: 分页大家应该都很清楚,今天我来给大家做一下Django的rest_framework的分页组件的分析:我的讲解的思路是这样的,分别使用APIview的视图类和基于ModelViewSet的视图 ...

  5. python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页)

    一.ajax登录示例 新建项目login_ajax 修改urls.py,增加路径 from app01 import views urlpatterns = [ path('admin/', admi ...

  6. [独孤九剑]Oracle知识点梳理(四)SQL语句之DML和DDL

    本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...

  7. django DRF理解

    django restframework(DRF) 最近的开发过程当中,发现restframework的功能很强大,所以尝试解读了一下源码,写篇博客分享给大家,有错误的地方还请各位多多指出 视图部分 ...

  8. DRF 过滤排序分页异常处理

    DRF 中如何使用过滤,排序,分页,以及报错了如何处理?10分钟get了~

  9. python 学习笔记十八 django深入学习三 分页,自定义标签,权限机制

    django  Pagination(分页) django 自带的分页功能非常强大,我们来看一个简单的练习示例: #导入Paginator>>> from django.core.p ...

随机推荐

  1. Linux中 SonarQube代码质量管理平台安装

    SonarQube是管理代码质量一个开源平台,可以快速的定位代码中潜在的或者明显的错误. SonarQube安装 1.环境准备 (1)sonarQube 下载地址https://www.sonarqu ...

  2. 7.13python多进程

    所以引入了     多进程*(异步) 处理效率高 #!/usr/bin/env python #!--*--coding:utf-8 --*-- #!@Time :2018/7/13 19:26 #! ...

  3. Jmeter压力测试工具安装及使用教程

    一.Jmeter下载 进入官网:http://jmeter.apache.org/ 1.第一步进入官网如下图 2.选择进行下载,下载下来为一个压缩包,解压即可. 3.我下载的是jmeter4.0版本, ...

  4. HTML滚动文字代码 marquee标签

    看到一个HTML滚动文字代码 marquee标签的内容,非常全面,而且觉得有点意思,可以让大家为自己博客或者网站设置一个漂亮的滚动文字. 以下是原文: <marquee style=" ...

  5. web.config 加密/解密 正确版

    一般加密方式: 利用Aspnet_regiis: cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 aspnet_regiis -pe "co ...

  6. CSS:盒模型和position定位

    盒模型 页面上显示的每个元素(包括内联元素)都可以看作一个盒子,即盒模型( box model ).请看Chrome DevTools 里的截图: 可以显而易见的看出盒模型由 4 部分组成.从内到外分 ...

  7. Java代码中获取Json的key值

    测试json字符串: {"access_token":"hkbQl5o_l67dZ7_vJRATKBwTLk9Yj5QyMuOJThAr8Baj0xWf4wxW1p4ym ...

  8. dp的斜率优化

    对于刷题量我觉得肯定是刷的越多越好(当然这是对时间有很多的人来说. 但是在我看来我的确适合刷题较多的那一类人,应为我对知识的应用能力并不强.这两天学习的内容是dp的斜率优化.当然我是不太会的. 这个博 ...

  9. Qt5线程错误:QThread: Destroyed while thread is still running(执行runThread->exit(0))

    背景: 当前类,编写接收子线程类信号的槽函数和触发子线程类执行的信号: 新建一个子线程类,编写槽函数和信号,MyClass *m_MyClass=new MyClass(): 新建一个线程对象QThr ...

  10. python+rabbitMQ实现生产者和消费者模式

    (一)安装一个消息中间件,如:rabbitMQ (二)生产者 sendmq.py import pika import sys import time # 远程rabbitmq服务的配置信息 user ...