django rest_framework vue 实现用户列表分页

后端

配置urls

# 导入view
from api.appview.userListView import userListView # 增加url配置
urlpatterns = [ ...
url(r'^home/userlist/$', userListView.as_view()), # 用户列表
]

编写视图

# FileName : userListView.py
# Author : Adil
# DateTime : 2019/8/2 1:46 PM
# SoftWare : PyCharm from api import models
from django.http import JsonResponse
from rest_framework.views import APIView from api.models import User
from api.utils.auth import Authentication
from api.common.PageHandle import MyLimitOffsetPagination
from rest_framework import serializers class userListView(APIView): authentication_classes = [Authentication] # 添加认证
permission_classes = [] # 不尽兴权限控制 def get(self,request,*args,**kwargs): # user1 = models.User.objects.all()
#
# print(user1) # <QuerySet [<User: username: wang,password: 123456>,... # userInfoList = models.User.objects.values() # print('^^^^^')
# for userlist in userInfoList:
#
# # userlist = model_to_dict(userlist)
# print(type(userlist))
# print(userlist) # print(type(userInfoList))
# print("!!!!!")
# userInfoList = model_to_dict(userInfoList)
#
# print(type(userInfoList)) # print(userInfoList) # <QuerySet [{'id': 1, 'username': 'wang', 'password': '123456', 'age': '20', 'e_mail': '272981562@qq.com', 'user_type': 2, 'create_time': datetime.datetime(2019, 7, 30, 21, 16, 12, 301365), 'update_time': datetime.datetime(2019, 7, 30, 21, 16, 12, 301396)}, {'id': 2, ... # for userList in userInfoList:
# #print(userList) # users = models.User.objects.values_list()
# print("8***")
# print(users) # <QuerySet [(1, 'wang', '123456', '20', '272981562@qq.com', 2, datetime.datetime(2019, 7, 30, 21, 16, 12, 301365), datetime.datetime(2019, 7, 30, 21, 16, 12, 301396)), (2, 'yang', '....
# for user in users:
# print(user) userInfoList = models.User.objects.values()print(userInfoList) ret = {'code': 1000, 'msg': None, 'data': None,'lens':None}
try:
ret['msg'] = '成功'
ret['data'] = list(userInfoList)
       ret['lens'] = len(userInfoList)
except Exception as e:
ret['code'] = 1001
ret['msg'] = '失败' return (JsonResponse(ret))
# return (page.get_paginated_response(roles_ser.data))
 

至此完成后端code。

查看接口返回

可以看到此时返回的是查询所有结果,有21条数据。

可以看到 这样返回的结果是21条数据,而不能分页展示。

下面介绍一下分页功能

创建分页类

# FileName : PageHandle.py
# Author : Adil
# DateTime : 2019/8/5 4:33 PM
# SoftWare : PyCharm #logintest/api/common/PageHandle.py from rest_framework.pagination import LimitOffsetPagination,PageNumberPagination class MyLimitOffsetPagination(PageNumberPagination):
# 每页显示多少个
page_size = 3
# 默认每页显示3个,可以通过传入pager1/?currentPage=2&pageSize=4,改变默认每页显示的个数
page_size_query_param = "pageSize"
# 最大页数不超过10
max_page_size = 100
# 获取页码数的
page_query_param = "currentPage" # default_limit:表示默认每页显示几条数据
# limit_query_param:表示url中本页需要显示数量参数
# offset_query_param:表示从数据库中的第几条数据开始显示参数
# max_limit:表示每页最大显示数量,做限制使用,避免突然大量的查询数据,数据库崩溃

view 增加分页代码  方式一

        # 增加分页

        userInfoList = models.User.objects.values().order_by('id')

        print(userInfoList)

        page = MyLimitOffsetPagination()
print(page)
page_roles = page.paginate_queryset(queryset=userInfoList, request=request, view=self)
print(page_roles)
roles_ser = PagerSerializer(instance=page_roles, many=True)
print(roles_ser.data)
# return Response(roles_ser.data) # 只返回数据
# return page.get_paginated_response(roles_ser.data) # 返回前后夜url ret = {'code': 1000, 'msg': None, 'data': None,'lens':None}
try:
ret['msg'] = '成功'
ret['data'] = list(page_roles)
print(len(page_roles))
print(len(userInfoList)) ret['lens'] = len(userInfoList) except Exception as e:
ret['code'] = 1001
ret['msg'] = '失败' return (JsonResponse(ret))

这是请求相应如下

方式二

# userlistView.py

创建类
class PagerSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = "__all__"

直接上代码

# FileName : userListView.py
# Author : Adil
# DateTime : 2019/8/2 1:46 PM
# SoftWare : PyCharm from api import models
from django.http import JsonResponse
from rest_framework.views import APIView from api.models import User
from api.utils.auth import Authentication
from api.common.PageHandle import MyLimitOffsetPagination
from rest_framework import serializers class PagerSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = "__all__" class userListView(APIView): authentication_classes = [Authentication] # 添加认证
permission_classes = [] # 不尽兴权限控制 def get(self,request,*args,**kwargs): # user1 = models.User.objects.all()
#
# print(user1) # <QuerySet [<User: username: wang,password: 123456>,... # userInfoList = models.User.objects.values() # print('^^^^^')
# for userlist in userInfoList:
#
# # userlist = model_to_dict(userlist)
# print(type(userlist))
# print(userlist) # print(type(userInfoList))
# print("!!!!!")
# userInfoList = model_to_dict(userInfoList)
#
# print(type(userInfoList)) # print(userInfoList) # <QuerySet [{'id': 1, 'username': 'wang', 'password': '123456', 'age': '20', 'e_mail': '272981562@qq.com', 'user_type': 2, 'create_time': datetime.datetime(2019, 7, 30, 21, 16, 12, 301365), 'update_time': datetime.datetime(2019, 7, 30, 21, 16, 12, 301396)}, {'id': 2, ... # for userList in userInfoList:
# #print(userList) # users = models.User.objects.values_list()
# print("8***")
# print(users) # <QuerySet [(1, 'wang', '123456', '20', '272981562@qq.com', 2, datetime.datetime(2019, 7, 30, 21, 16, 12, 301365), datetime.datetime(2019, 7, 30, 21, 16, 12, 301396)), (2, 'yang', '....
# for user in users:
# print(user) # 增加分页 userInfoList = models.User.objects.values().order_by('id') print(userInfoList) page = MyLimitOffsetPagination()
print(page)
page_roles = page.paginate_queryset(queryset=userInfoList, request=request, view=self)
print(page_roles)
roles_ser = PagerSerializer(instance=page_roles, many=True)
print(roles_ser.data)
# return Response(roles_ser.data) # 只返回数据
# return page.get_paginated_response(roles_ser.data) # 返回前后夜url ret = {'code': 1000, 'msg': None, 'data': None,'lens':None}
try:
ret['msg'] = '成功'
ret['data'] = list(page_roles)
print(len(page_roles))
print(len(userInfoList)) ret['lens'] = len(userInfoList) except Exception as e:
ret['code'] = 1001
ret['msg'] = '失败' # return (JsonResponse(ret))
return (page.get_paginated_response(roles_ser.data))

前端

前端预期

添加router

import userlist from '@/components/userlist'
Vue.use(Router) var router = new Router({
routes: [
{
path: '/userlist',
name: 'userlist',
component: userlist
},

新建userlist.vue,里面有两种方式处理后端返回。

<template>
<el-container style="height: 100%; border: 1px solid #eee">
<el-aside width="200px" style="background-color: rgb(238, 241, 246)">
<el-menu :default-openeds="['1', '3']">
<el-submenu index="">
<template slot="title"><i class="el-icon-message"></i>导航一</template>
<el-menu-item-group>
<template slot="title">分组一</template>
<el-menu-item index="1-1">选项1</el-menu-item>
<el-menu-item index="1-2">选项2</el-menu-item>
</el-menu-item-group>
<el-menu-item-group title="分组2">
<el-menu-item index="1-3">选项3</el-menu-item>
</el-menu-item-group>
<el-submenu index="1-4">
<template slot="title">选项4</template>
<el-menu-item index="1-4-1">选项4-1</el-menu-item>
</el-submenu>
</el-submenu>
<el-submenu index="">
<template slot="title"><i class="el-icon-menu"></i>导航二</template>
<el-menu-item-group>
<template slot="title">分组一</template>
<el-menu-item index="2-1">选项1</el-menu-item>
<el-menu-item index="2-2">选项2</el-menu-item>
</el-menu-item-group>
<el-menu-item-group title="分组2">
<el-menu-item index="2-3">选项3</el-menu-item>
</el-menu-item-group>
<el-submenu index="2-4">
<template slot="title">选项4</template>
<el-menu-item index="2-4-1">选项4-1</el-menu-item>
</el-submenu>
</el-submenu>
<el-submenu index="">
<template slot="title"><i class="el-icon-setting"></i>导航三</template>
<el-menu-item-group>
<template slot="title">分组一</template>
<el-menu-item index="3-1">选项1</el-menu-item>
<el-menu-item index="3-2">选项2</el-menu-item>
</el-menu-item-group>
<el-menu-item-group title="分组2">
<el-menu-item index="3-3">选项3</el-menu-item>
</el-menu-item-group>
<el-submenu index="3-4">
<template slot="title">选项4</template>
<el-menu-item index="3-4-1">选项4-1</el-menu-item>
</el-submenu>
</el-submenu>
</el-menu>
</el-aside> <el-container style="padding-bottom: 15px">
<el-header style="text-align: right; font-size: 12px">
<el-dropdown>
<i class="el-icon-setting" style="margin-right: 15px"></i>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item>退出</el-dropdown-item>
<!-- <el-dropdown-item>新增</el-dropdown-item>
<el-dropdown-item>删除</el-dropdown-item> -->
</el-dropdown-menu>
</el-dropdown>
<span>Adil</span>
</el-header> <el-main>
<el-table :data="tableData">
<el-table-column prop="create_time" label="日期" width="">
</el-table-column>
<el-table-column prop="username" label="姓名" width="">
</el-table-column>
<el-table-column prop="username" label="地址">
</el-table-column>
</el-table>
</el-main>
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[10, 20, 30, 50]"
:page-size="pageSize"
layout=" sizes, prev, pager, next, jumper"
:total="total">
</el-pagination> </el-container>
</el-container> </template> <style>
.el-header {
background-color: #B3C0D1;
color: #333;
line-height: 60px;
} .el-aside {
color: #333;
}
</style> <script>
import axios from 'axios';
export default {
data() {
return {
tableData: [],
total: 0,
currentPage: 1,
pageSize: 10
}
},
created(){
this.getUserList()
},
methods:{
handleSizeChange(size) {
this.pageSize = size;
this.getUserList();
},
handleCurrentChange(current) {
this.currentPage = current;
this.getUserList();
},
getUserList(){
const token = localStorage.getItem('token');
axios.get(`/home/userlist/?token=${token}`,
{headers:{token:localStorage.getItem('token')},
params: {
currentPage: this.currentPage,
pageSize: this.pageSize
}
}).then((res)=>
{
// 后台方式一
// const data = res.data
// this.tableData = data.data;
// this.total = data.lens; // 后台方式二
const data = res.data
this.tableData = data.results;
this.total = data.count; console.log(res.data);
// if (res.data.code===1000){
// // localStorage.setItem('token',res.data.token);
// // this.$router.push({path:'/userlist'});
// }
});
}
} // getUserList(){
// axios.get('/home/userlist/').then((res)=>
// {
// console.log(res);
// // if (res.data.code===1000){
// // // localStorage.setItem('token',res.data.token);
// // // this.$router.push({path:'/userlist'});
// // }
// });
// }
// } }
</script>

方式二的返回结果如下

django rest_framework vue 实现用户列表分页的更多相关文章

  1. django rest_framework vue 实现用户登录

    django rest_framework vue 实现用户登录 后端代码就不介绍了,可以参考  django rest_framework 实现用户登录认证 这里介绍一下前端代码,和前后端的联调过程 ...

  2. 巨蟒django之CRM2 展示客户列表&&分页

    1.展示客户列表 点击画红线中的views,进入下列界面 路径的查找顺序:应该是先查找外层的templates里边的html,然后查找app里边的templates 另一个会按照app的顺序进行寻找, ...

  3. Vue + ElementUI的电商管理系统实例03 用户列表

    1.通过路由展示用户列表页 新建user文件夹,里面新建Users.vue文件: <template> <div> <h3>用户列表组件</h3> &l ...

  4. 第三百八十八节,Django+Xadmin打造上线标准的在线教育平台—网站列表分页

    第三百八十八节,Django+Xadmin打造上线标准的在线教育平台—网站列表分页 分页可以用一个第三方分页模块django-pure-pagination 下载地址:https://github.c ...

  5. django rest_framework 实现用户登录认证

    django rest_framework 实现用户登录认证 1.安装 pip install djangorestframework 2.创建项目及应用 创建过程略 目录结构如图 3.设置setti ...

  6. python之Django rest_framework总结

    一.rest api    a.api就是接口         如: - http://www.oldboyedu.com/get_user/                - http://www. ...

  7. Django rest framework(7)----分页

    目录 Django rest framework(1)----认证 Django rest framework(2)----权限 Django rest framework(3)----节流 Djan ...

  8. Django rest_framework 实用技巧

    前言: 最近工作中需要用到Django rest_framework框架做API, 边学边写,记录了一些实际工作中需要用到的功能,不是很全也不系统,以后需要什么功能可以在这查询. 后续还会更新其它的用 ...

  9. Python之Django rest_Framework框架源码分析

    #!/usr/bin/env python # -*- coding:utf-8 -*- from rest_framework.views import APIView from rest_fram ...

随机推荐

  1. wal2json Dockerfile

    以下是一个wal2json pg扩展的dockerfile,方便测试使用 dockerfile FROM postgres:11.2 AS build ENV VERSION 1_0 RUN buil ...

  2. [LeetCode] 344. Reverse String 翻转字符串

    Write a function that reverses a string. The input string is given as an array of characters char[]. ...

  3. Chrome操作技巧

    好用的插件: 如果你用 Chrome 浏览器,这8款插件一定要用! - 知乎 沙拉查词:     集合各大翻译,详细好用权威 Simple Allow Copy: 开启被网页屏蔽的自由复制功能 Qui ...

  4. Via板载声卡底噪严重、播放卡顿及耳机与扬声器音源切换问题【解决方法】

    HD VDeck[VIA威盛HD audio系列音频驱动] 关闭音效增强之后,一切正常............ 默默骂一句VIA沙雕 另外附上:开启耳机和扬声器独立音源的设置 注册表 Computer ...

  5. VS2017 高级使用方法

    如何离线安装,创建脱机安装 - Visual Studio | Microsoft Docs 如离线下载C++桌面开发(VS中英版本) E:\0User_File\Downloads>vs_co ...

  6. 打造个人专属网盘nextcloud

    原文 https://edu.aliyun.com/course/150/lesson/list?spm=5176.9278281.815111.sence.114d4f3eLLMS53

  7. java web开发入门十二(idea创建maven SSM项目需要解决的问题)基于intellig idea(2019-11-09 11:23)

    一.spring mvc action返回string带双引号问题 解决方法: 在springmvc.xml中添加字符串解析器 <!-- 注册string和json解析适配器 --> &l ...

  8. Golang(八)go modules 学习

    0. 前言 最近加入鹅厂学习 k8s,组内使用 Go 1.11 以上的 go modules 管理依赖,因此整理了相关资料 本文严重参考原文:初窥Go module 1. 传统 Golang 包依赖管 ...

  9. fiddler抓包-4-简单对数据进行mock

    前言 Fiddler中有一个 AutoRespinder 选项,我们可以用它作为mock数据,可以修改它的参数等等.所有信息的返回,与我们断点类似,但这里也可以mock状态码直接是404或者跳转至另一 ...

  10. scala中nothing和null的区别

    1:nothing是所有类型的子类,他没有具体的实例对象,常见的应用:抛出异常.程序exit.无线循环等. 2:nothing是所有类型的子类,也是null的子类,nothing没有对象,但是可以用来 ...