之前做项目对表格数据管理一直都很头疼,表格通常会包含分页、筛选、单行表格数据操作、多行表格数据操作、排序这些功能。对vue这个框架不熟悉,前后端不分离导致在表格这一项上需要捋大量逻辑、写大量的代码。后来试了一下layui这个前端框架中的表格,意外发现十分好用

layui

layui框架和其他前端框架并没有什么区别,拥有比较齐全的组件,使用文档看的是有点难受,因为代码部分和组件部分各自堆积在一起,找起来让人头疼。

虽然但是,用起来的时候还是很香的layui官网

layui表格

查看layui表格文档,使用异步请求表格数据,先写一个简单表格界面。下面代码中一定要确保引入了你的css和js文件,layui.css和layui.js可以在layui官网下载,jquery去 jquery官网 下载

<!doctype html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><link rel="stylesheet" type="text/css" href="{% static "index/css/layui.css" %}">
</head>
<body>
<div style="padding: 20px 40px"><table class="layui-hide" id="test" lay-filter="test"></table>
</div></body>
<script type="text/html" id="toolbarDemo"><div class="layui-btn-container"><button class="layui-btn layui-btn-sm" lay-event="getCheckLength">增加数据</button><button class="layui-btn layui-btn-sm" lay-event="deleteCheckData" style="background-color: #ef4136">删除所选</button></div>
</script>
<script type="text/html" id="barDemo"><a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit">编辑</a><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
</script><script src="{% static 'index/js/jquery.min.js' %}"></script>
<script src="{% static 'index/layui.js' %}"></script>
<script>layui.use(['table', 'form'], function () {let table = layui.table;let form = layui.form;table.render({elem: '#test', url: '/get_data' //请求数据接口路由, method: 'post', toolbar: '#toolbarDemo' //开启头部工具栏,并为其绑定左侧模板, defaultToolbar: ['exports', 'print'], title: '用户数据表', cols: [[{type: 'checkbox'}, {field: 'id', title: 'ID', align: "center", sort: true}, {field: 'name', title: '名称', align: "center", sort: true}, {field: 'sex', title: '性别', align: "center", sort: true}, {field: 'age', title: '年纪', align: "center", sort: true}, {fixed: 'right', title: '操作', toolbar: '#barDemo', align: "center"}]], page: true, error: function(error, content){message_fail('加载失败');console.log(error, content)}});//头工具栏事件//监听行工具事件});
</script>
</html>

这里向后台/get_data接口请求了数据,我们需要写这样一个接口提供数据,并且返回的json数据要满足文档的格式。前端field的名字要在返回的data值里的数据键名里面

from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def get_data(request):data = [{'id': x,'name': '小' + str(x),'sex': x % 2,'age': x} for x in range(10)] # 简单的创造数据,正常是从数据中读出这些数据context = {"code": 0,"msg": "","count": 1000, # 所有数据数量"data": data # 需要查询出来数据}return JsonResponse(context, safe=False)

这样一来,界面上就会显示查询出来的数据,显示的数据正是我们创造的数据

如此该界面有了初步样子,列名旁边的上下箭头可以进行排序,点击下一页也会显示,只是显示的是相同的数据,下面我们开始慢慢增加功能。

分页

现在显示的数据有一千条,因为返回的json数据里count为1000。这里我们应该换成真实的数据数量,我们修改返回数据的控制器,返回不同页的数据。

@csrf_exempt
def get_data(request):# 接收参数page = int(request.POST.get('page', '1'))limit = int(request.POST.get('limit', '10'))start = (page - 1) * limit # 数据起始位置end = page * limit # 数据终止位置data = [{'id': x + start, # 简单的改变id来表示数据的改变'name': '小' + str(x),'sex': x % 2,'age': x} for x in range(limit)] # 改变查询数量context = {"code": 0,"msg": "","count": 1000,"data": data}return JsonResponse(context, safe=False)

我们接收pagelimit两个参数,这是前端为了控制分页的参数,page表示当前页,limit表示查询数量,像上面一样修改代码,重新刷新页面

我们数据不再是一样的数据,现在改变每页条数和跳转下一页查询出的都是对应的数据,这样我们完成了分页功能,实际中请修改为你的数据库查询操作。

单条数据操作

在html的注释\\监听行工具事件下增加代码

//监听行工具事件
table.on('tool(test)', function (obj) {let data = obj.data;let id = data['id']; // 每行的idconsole.log(id)if (obj.event === 'del') { // 删除按钮layer.confirm('真的删除这一行数据吗(该操作无法撤销)', function (index) {$.ajax({ // ajax异步请求type: "post",contentType: "application/json;charset=UTF-8",url: "/delete",data: JSON.stringify({"id":id,}),success: function (result) {// 你的操作obj.del(); // 前端上删除该条数据,后台数据库并没删除},})layer.close(index);});}else if(obj.event === 'edit'){ // 编辑按钮// 你的操作layer.msg('我是编辑');}
});

这里调出了这些按钮的触发事件,可以在这里触发时向后台发送数据,实现数据库中的修改删除,上面代码放了ajax异步请求代码,成功后的操作和控制器的代码都需要自己编写。每次点击都会输出每行数据的id,这里id就是后端返回的数据里的id,可以使用数据库的主键,这样方便对数据进行操控。

多条数据的操控

对于多条数据的操作也是同理,我们只需要拿到数据的主键,传给后端,后端就可以对这些数据进行相应的操作

//头工具栏事件
table.on('toolbar(test)', function (obj) {var checkStatus = table.checkStatus(obj.config.id);console.log(checkStatus);switch (obj.event) {case 'delete':var data = checkStatus.data; // 获取选中的行let delete_id_list = [] for(var i = 0; i < data.length; i++){delete_id_list.push(data[i]['id']);}layer.msg('我是删除所选, 选中数据id值:' + JSON.stringify(delete_id_list));// 你的操作break;case 'add':layer.confirm('增加数据', {title:'提示'}, function(index){// 你的操作layer.close(index);});break;}
});

同理需要在其中写入你的代码,对后台发送请求,后台对数据库进行操控,就能实现数据的多行操作

心得

文章里的实例代码都是简单处理过的,记录我的所学所得。

django+layui表格数据管理相关推荐

  1. django+layUI表格序号自动增加

    给数据加 templet 属性不能直接用{{d.LAY_TABLE_INDEX+1}}会报错{{ or {% expected 用{% verbatim %}{% endverbatim %}将内容包 ...

  2. layui表格展示数据时:返回的数据不符合规范,正确的成功状态码应为:code: 0

    1.今天,用django和layui结合,处理表格展示数据时,有数据的表格能正常显示列表,无数据的表格却提示了:返回的数据不符合规范,正确的成功状态码应为:"code": 0,于是 ...

  3. python+django+layUI+MySQL+TSC打印机搭建4G设备管理平台项目(二)——过程中的难点记录

    一.员工注册视图的使用 class UserRegisterView(View):def get(self, request): # 显示登录页return render(request, 'regi ...

  4. python web项目(django+Layui+mysql)

    python web项目(django--+Layui+mysql) 1.结果图 2目录结构 3.开干 4.总结 为了完成期末作业,做的一个学生成绩管理系统,采用django+Layui+mysql5 ...

  5. Layui 表格编辑

    html代码 <td class="My_edit"></td> Jquery代码 //-----[Layui表格编辑()] function Layui_ ...

  6. layui表格获取不到多层数据的解决方案

    layui表格获取不到多层数据的解决方案 参考文章: (1)layui表格获取不到多层数据的解决方案 (2)https://www.cnblogs.com/yinhuiyang/p/9298559.h ...

  7. layui表格点击排序按钮后,表格绑定事件失效解决方法

    layui表格点击排序按钮后,表格绑定事件失效解决方法 参考文章: (1)layui表格点击排序按钮后,表格绑定事件失效解决方法 (2)https://www.cnblogs.com/gongliha ...

  8. layui根据条件显示列_templet渲染layui表格数据的三种方式

    layui前端框架是我一直在使用,也很好用. 今天记录一下,templet渲染layui表格数据的三种方式. 第一种:直接渲染(对于表格数据样式要求不高) 直接在动态表格字段声明,添加templet属 ...

  9. html 整行选择状态,Layui表格选中指定行的radio单选框并滚动到该行的实现代码

    layui table有多行数据,通过外部输入内容,需要定位到指定行,选中改行,对改行进行操作. 实现效果: HTML代码: 获取选中行数据 设置选中行 layui.use('table', func ...

  10. 运用多种设计模式的综合案例_SpreadJS 纯前端表格控件应用案例:表格数据管理平台...

    由某科技公司研发的表格数据管理平台,是一款面向业务和企业管理系统定制开发的应用平台,包括类 Excel 设计器.PC应用端和移动应用端等应用模块.该平台具备强大的业务配置和集成开发能力,对于企业客户的 ...

最新文章

  1. phpHiveAdmin开发两个月记录
  2. vmware克隆server2008R2造成SID冲突
  3. access中总计为first_用Access开发生产管理系统
  4. high definition audio感叹号_【网抑云文案】你知道红色感叹号吧,我对着它聊了184天。...
  5. 我的《一种前端代码质量检测方法及装置》专利申请
  6. Android UI开发第三十二篇——Creating a Navigation Drawer
  7. JS前端怎样通过程序来获取当前浏览器是什么版本的浏览器(或者判断当前浏览器是否为IE8及以下浏览器)
  8. SPSS操作(五):主成分分析
  9. zmap扫描mysql_zmap/masscan 快速扫描网络
  10. 数字货币:影响深远的创新
  11. Debian搭建SVN服务器
  12. 五种永久免费 内网穿透傻瓜式使用
  13. 忍者X3插件App计划,缔造属于自己的Web营销App
  14. Java Swing图书管理系统桌面软件附源码
  15. NOIP2016提高A组模拟中秋节9.15总结
  16. matlab绘制四棱台,Auto-CAD2016斜截四棱台的画法.ppt
  17. 软件项目管理学习(二)
  18. Unity虚拟相机Cinemachine教程
  19. su Authentication failure解决方法
  20. Android自定义控件入门到精通--View树的布局

热门文章

  1. Springboot集成urule
  2. jira权限设置-各个项目组查看不同项目
  3. CentOS8-linux安装 tailf命令
  4. 老师必备的数学几何绘图软件,赶紧收藏!
  5. 映美精工业相机与电脑通信及报错解决方案
  6. 数车计算机编程教学caxa,caxa数控车软件编程全套视频教程2016/2015
  7. 软件项目成本估算的基本方法
  8. pip卸载旧版本后安装新版本(我是Python3)
  9. 5分钟商学院-个人篇-沟通能力
  10. 抛弃手册,开启TongWeb+TongLINK/Q的开发方式