一、序列化

 from  rest_framework impost serializers
from . models import * class GoodsSerializer(serializers,ModelSerializer):
"""商品序列化"""
class Meta:
model=Goods
fields="__all__"

serializers.py

二、分页代码

 from rest_framework.views import APIView
from rest_framework.response import Response
from django.core.paginator import Paginator
from .serializer import GoodsSerializer
from django.core.paginator import Paginator, EmptyPage, InvalidPage class GoodsPageApi(APIView):
"""
分页
"""
def get(self, request, pindex):
# 1、获取商品信息
goods_list = Goods.objects.all()
# 2、实例化分页器
paginat = Paginator(goods_list, 2)
# 3、 获取分页
paged = paginat.page(pindex)
try: # 判断是否有下一页
paged.has_next()
down_page = paged.next_page_number() # 获取一下页的页码
except EmptyPage: # 如果下一页为空的话,
down_page = paged.paginator.num_pages # 获取最后一页的页码
paged = paginat.page(down_page) try:
paged.has_previous() # 判断是否有上一页
up_page = paged.previous_page_number() # 获取上页的页码
except InvalidPage: # 如果没有上一页
up_page = 1 # 返回第一页
paged = paginat.page(up_page) # 4、 做序列化
page_serializer = GoodsSerializer(paged, many=True) # 5、 返回数据
return Response({
'code': 200,
'data': page_serializer.data,
'page_list': [i for i in paginat.page_range],
'has_previous': paged.has_previous(), # 判断是否有上一页
'has_next': paged.has_next(), # 判断是否有下一页
'previous_page_number': up_page, # 返回上一页的页码
'next_page_number': down_page, # 返回下一页的页码
'page_number': paged.number # 返回当前页页码
})

views.py

三、urls.py

path('goods_page/<pindex>', views.GoodsPageApi.as_view()),  # 商品分页

四、vue分页展示

<template>
<div>
<table>
<tr>
<td>商品编码</td>
<td>商品名称</td>
<td>商品图片</td>
<td>商品详情</td>
<td>商品价格</td>
</tr>
<tr v-for="goods in goods_list">
<td>{{goods.id}}</td>
<td>{{goods.goods_name}}</td>
<td><img :src="'http://127.0.0.1:8000' + goods.goods_img" alt="" style="width:100px; heigth:100px"></td>
<td>{{goods.goods_content}}</td>
<td>{{goods.goods_price}}</td>
</tr>
</table>
<div>
<button v-for="page in page_list" @click="get_num($event)" :value="page">{{page}}</button>
</div>
</div>
</template> <script>
import axios from 'axios'
export default {
data(){
return{
goods_list: [],
page_list: [],
p: ''
}
},
methods:{
get_goods(){
var self = this
axios({
method: 'get',
url: 'http://127.0.0.1:8000/myapp/goods_page/'+ this.p
}).then(function(res){
console.log(res.data)
self.goods_list = res.data.data
self.page_list = res.data.page_list
})
},
get_num(event){
this.p = event.target.value // 通过事件获取button的value
console.log(this.p)
this.get_goods() // 点击按钮的时候,重新调用get_goods方法
}
},
created(){ // 页面加载的时候,自动执行下面方法
this.get_goods()
}
}
</script>

DRF分页的更多相关文章

  1. python 全栈开发,Day99(作业讲解,DRF版本,DRF分页,DRF序列化进阶)

    昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...

  2. drf 分页,获取fk,choise,m2m等字段数据(序列化)

    1.什么是restful规范 是一套规则,用于程序之间进行数据交换的约定. 他规定了一些协议,对我们感受最直接的的是,以前写增删改查需要写4个接口,restful规范的就是1个接口,根据method的 ...

  3. Django DRF 分页

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

  4. DRF 分页组件

    Django Rest Framework 分页组件 DRF的分页 为什么要使用分页 其实这个不说大家都知道,大家写项目的时候也是一定会用的, 我们数据库有几千万条数据,这些数据需要展示,我们不可能直 ...

  5. DRF分页组件

    为什么要使用分页 其实这个不说大家都知道,大家写项目的时候也是一定会用的, 我们数据库有几千万条数据,这些数据需要展示,我们不可能直接从数据库把数据全部读取出来, 这样会给内存造成特别大的压力,有可能 ...

  6. 【DRF分页】

    目录 第一种 PageNumberPagination 查第n页,每页显示n条数据 第二种 LimitOffsetPagination 在第n个位置,向后查n条数据 第三种 CursorPaginat ...

  7. drf分页组件补充

    drf偏移分页组件 pahenations.py from rest_framework.pagination import LimitOffsetPagination class MyLimitOf ...

  8. drf分页功能

    什么是restful规范 是一套规则,用于程序之间进行数据交换的约定. 他规定了一些协议,对我们感受最直接的的是,以前写增删改查需要写4个接口,restful规范的就是1 个接口,根据method的不 ...

  9. drf 分页

    分页: 1.简单的分页: 每页显示条数: page_size = api_settings.PAGE_SIZE 查询的页码数: page_query_param = "page" ...

随机推荐

  1. IDEA 接口调试插件 HTTP Client

    界面客户端 使用手册 https://www.jetbrains.com/help/idea/testing-restful-web-services.html 打开方式 Tools -> HT ...

  2. socket编程执行远程命令实现_python

    一.单客户端连接的例子: 服务端: import socket,os,subprocess server=socket.socket() server.bind(('localhost',1234)) ...

  3. [CQOI2007] 余数求和 - 整除分块

    \(\sum_{i=1}^n\;k\;mod\;i\) Solution \(\sum_{i=1}^n\;k\;mod\;i\\=\sum_{i=1}^n(k-i\lfloor{\frac{k}{i} ...

  4. while与do while

    一:循环结构 循环的概念:重复得做某一件事情 举例: 打印50份试卷 沿操场跑10圈 做100道编程题 循环结构的特点: 循环条件 (50,10,100) 循环操作 (打印试卷,沿操场跑圈,做编程题) ...

  5. ZJOI2006 书架 lg2596

    题面见https://www.luogu.org/problemnew/show/P2596 题面就是描述了一个书柜从上到下放着书,可以看作一个序列,每个数的序号为它在从上向下数第几本 一开始建树偷了 ...

  6. 理解 Oracle 多租户体系中(12c,18c,19c)Revoke 回收权限作用域范围

    本篇探讨以下几个问题:你可提前猜测下面6个场景语句中,哪几个回收可以成功执行? 1. 在CDB级别中对用户进行权限回收,不带 container 子句的效果: 2. 在CDB级别中对用户进行权限回收, ...

  7. 更新centos本地仓库(换源)

    /etc/yum.repos.d/CentOS-Base.repo 1,首先进行备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/Cen ...

  8. WPF 解决无边框产生的相关问题

    原文:WPF 解决无边框产生的相关问题 最大化: 在设置WindowStyle="None" AllowsTransparency="True"后,最大化会覆盖 ...

  9. 十分钟理解JavaScript引擎的执行机制

    关注专栏写文章 十分钟理解JavaScript引擎的执行机制 方伟景 千锋前端开发推动市场提升的学习研究者. 4 人赞同了该文章 首先,请牢记2点: JS是单线程语言 JS的Event Loop是JS ...

  10. MySQL5.5升级至5.7

    一.下载免安装MySQL5.7包 下载页面 下载链接 二.替换mysql的安装目录 解压mysql5.7 tar -zxf mysql-5.7.23-linux-glibc2.12-x86_64.ta ...