实战Flask+BootstrapTable后端传javascript脚本给前端实现多行编辑(ajax方式)

相信看到此文的朋友们一定会感到庆幸,总之我是用了两天死磕,才得到如下结果,且行且珍惜,祝好各位!

话不多说,有图有源码

1.看图

2.前端实现页面

<!DOCTYPE html>
{% from "common/_macro.html" import static %}
<html>
<meta charset="utf-8">
<head>
<!-- 引入bootstrap样式 -->
<link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css" />
<!-- 引入bootstrap-table样式 -->
<link rel="stylesheet" href="/static/bootstrap-table-develop/bootstrap-table.min.css" />
<!-- layer -->
<link rel="stylesheet" href="/static/layer/2.4/skin/layer.css" />
<!-- jquery -->
<script type="text/javascript" src="/static/js/jquery-2.2.0.min.js" ></script>
<!-- bootstrap -->
<script type="text/javascript" src="/static/bootstrap/js/bootstrap.min.js" ></script>
<!-- bootstrap-table -->
<script type="text/javascript" src="/static/bootstrap-table-develop/bootstrap-table.min.js" ></script>
<!-- 引入中文语言包 -->
<script type="text/javascript" src="/static/bootstrap-table-develop/locale/bootstrap-table-zh-CN.min.js" ></script>
<!-- layer -->
<script type="text/javascript" src="/static/layer/2.4/layer.js" ></script>

</head>
<body class="gray-bg">
	<h1 align="center">Bootstrap-Table 多行编辑保存</h1>
	<div class="wrapper wrapper-content ">
		<div class="col-sm-12">
			<div class="ibox">
				<div class="ibox-body">
					<table id="exampleTable"></table>

					<button type="button" id="butSave" class="btn btn-primary col-sm-1 col-sm-offset-5" onclick="save()">保存</button>
				</div>
			</div>
		</div>
	</div>
	<div ></div>
</body>
</html>
<script>
	var prefix = "/hellotableeditrowssave";
	var $table = $('#exampleTable');
$(function() {
	var loadData = [];
	var tableColumns = [];
	initTable();
	ajaxTable('/hellotableeditrowssave/ajaxlist');

	function initTable() {
		$table.bootstrapTable({
			toolbar: '#toolbar',
			clickEdit: true,
			showToggle: true,
			pagination: true,       //显示分页条
			showColumns: true,
			showPaginationSwitch: true,     //显示切换分页按钮
			showRefresh: true,      //显示刷新按钮
			//clickToSelect: true,  //点击row选中radio或CheckBox
			columns: tableColumns
		});
	}


    function ajaxTable(url){
		//debugger;
		$.ajax({
			url: url,
			type: "GET",
			dataType: "json",
			success: function(rs){
				console.log(rs)
				loadData = rs.data.rows;
				tableColumns = eval(rs.data.columns);//JSON.parse(rs.data.columns);//'('++')'
				$table.bootstrapTable('refreshOptions',
				{
					columns: tableColumns,
					data: loadData,
				});
				//-----隐藏id列
				//$table.bootstrapTable('hideColumn','id');
			},
			error: function(rs){
				console.log(rs)
			}
		});
	}

});

//对象转json字符串
function objTostr(obj){
	if( typeof(obj)!=='object'  ){return obj;}
	var temp=Object.assign({},obj);
	return JSON.stringify( temp).replace(/"/g, '&quot;');
}
//行编辑数据更新到table中
function editRow(index,field,value,row){
	alert("修改了id="+row.id+" 字段名: ["+field+"] 的内容:['"+value+"']");
	 var rows = {
		index : index, //更新列所在行的索引
		field : field, //要更新列的field
		value : value //要更新列的数据
	};//更新表格数据
	$("#exampleTable").bootstrapTable("updateCell",rows);
}

function save(){
	var rows = $table.bootstrapTable('getSelections');
    if (rows.length == 0) {
        alert("请选择要保存的记录!");
        return;
    } else {
		var params = JSON.stringify(rows);
		$.ajax({
			url : '/hellotableeditrowssave/update',
			type : 'POST',
			data : params,
			contentType:'application/json;charset=utf-8',
			dataType:'JSON',
			cache : false,
			success : function(data) {
				layer.msg(data.data.msg);
			}
		});
    }
}
</script>

3.后端内容

#=============================================================
#---------------------阿桂天山 Ewangda--------------------------
"""
Bootstrap-table 动态多行编辑保存
"""
@app.route('/hellotableeditrowssave', methods=['GET','POST'])
def hellotableeditrowssave():
    return render_template('/hello_tableeditrowssave.html')

@app.route('/hellotableeditrowssave/ajaxlist', methods=['GET','POST'])
def hellotableeditrowssave_ajaxlist():
    columns = """[{'checkbox': true}, {'field': 'id','title': 'Item ID'}, {'field': 'name1','title': 'Item Name'}, {'field': 'price','title': 'Item Price'},
               {'field': 'goods','title': '商品', 'formatter': function(value, row, index, field) {  if (row['goods'] == "" || row['goods'] == null){
                   value = "";} else { value = row['goods']; } var abc = "hahaha"; return '<input class="form-control" value="'+value+'" name="goods" type="text" onblur="editRow(\\''+index+'\\',\\'goods\\',this.value,'+objTostr(row)+');">';}}]"""
    datas = [{ "id": 11, "name1": "gtj", "price": "¥11", "goods": "玩具小车" },
             { "id": 22, "name1": "Ewangda", "price": "¥22", "goods": "遥控赛车"  },
             { "id": 31, "name1": "小柘服务", "price": "¥32", "goods": "翻斗车"  }]
    data = {
        'columns' : columns,
        'rows' : datas
    }
    totalNum = 3
    return restful.success(data=data) #{'total': totalNum, 'data':datas}) #

@app.route('/hellotableeditrowssave/update', methods=['GET','POST'])
def hellotableeditrowssave_update():
    result = request.get_json()
    num = len(result)
    ids =[]
    for row in result:
        print(row['id'],row['goods'])
        ids.append(row['id'])
    # print(result)
    data ={
        'msg': "成功修改{0}条记录:ids={1}".format(num,ids)
    }
    return restful.success(data=data)
#=============================================================

就这些了,如果你有更好的方法,望不吝赐教!

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这是一个比较复杂的项目,需要一定的技术基础。以下是大致的步骤: 1. 搭建Flask应用程序,包括路由和页面模板。 2. 安装mysql,并连接到Flask应用程序。 3. 编写采集系统CPU和内存使用率的Python脚本,并将采集到的数据存储到mysql中的表中。 4. 使用Ajax实现前端页面与后端的数据交互,定时获取mysql中的数据并更新折线图。 具体实现步骤如下: 1. 搭建Flask应用程序 首先需要安装Flask框架和相关依赖。可以使用pip命令进安装: ```python pip install flask pip install flask-mysql ``` 接下来创建一个Flask应用程序,并编写路由和页面模板。 ```python from flask import Flask, render_template app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') if __name__ == '__main__': app.run() ``` 在templates文件夹下创建一个名为index.html的模板文件,用于显示实时监控的折线图。 ```html <!DOCTYPE html> <html> <head> <title>CPU内存实时监控</title> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/echarts/4.6.0/echarts.min.js"></script> </head> <body> <div id="chart" style="width: 100%; height: 400px;"></div> <script> var myChart = echarts.init(document.getElementById('chart')); var option = { title: { text: 'CPU内存实时监控' }, tooltip: { trigger: 'axis' }, legend: { data:['CPU使用率', '内存使用率'] }, xAxis: { type: 'category', boundaryGap: false, data: [] }, yAxis: { type: 'value', axisLabel: { formatter: '{value}%' } }, series: [ { name: 'CPU使用率', type: 'line', data: [] }, { name: '内存使用率', type: 'line', data: [] } ] }; myChart.setOption(option); setInterval(function() { $.ajax({ url: '/data', success: function(data) { var xAxisData = []; var cpuData = []; var memData = []; for(var i = 0; i < data.length; i++) { xAxisData.push(data[i].time); cpuData.push(data[i].cpu); memData.push(data[i].memory); } myChart.setOption({ xAxis: { data: xAxisData }, series: [ { name: 'CPU使用率', data: cpuData }, { name: '内存使用率', data: memData } ] }); } }); }, 1000); </script> </body> </html> ``` 2. 安装mysql,并连接到Flask应用程序 首先需要安装mysql,并创建一个数据库和一个表用于存储采集到的数据。 ```sql CREATE DATABASE monitor; USE monitor; CREATE TABLE data ( id INT NOT NULL AUTO_INCREMENT, time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, cpu FLOAT, memory FLOAT, PRIMARY KEY (id) ); ``` 接下来在Flask应用程序中添加mysql配置,并连接到mysql。 ```python from flaskext.mysql import MySQL app = Flask(__name__) app.config['MYSQL_DATABASE_HOST'] = 'localhost' app.config['MYSQL_DATABASE_PORT'] = 3306 app.config['MYSQL_DATABASE_USER'] = 'root' app.config['MYSQL_DATABASE_PASSWORD'] = '123456' app.config['MYSQL_DATABASE_DB'] = 'monitor' mysql = MySQL() mysql.init_app(app) @app.route('/data') def get_data(): cursor = mysql.get_db().cursor() cursor.execute('SELECT * FROM data ORDER BY time DESC LIMIT 30') data = cursor.fetchall() return jsonify(data) ``` 3. 编写采集系统CPU和内存使用率的Python脚本,并将采集到的数据存储到mysql中的表中 使用psutil库可以方便地获取系统CPU和内存使用率。编写一个Python脚本,定时采集CPU和内存使用率,并将采集到的数据存储到mysql中的表中。 ```python import psutil import time import pymysql conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', db='monitor') while True: cpu_percent = psutil.cpu_percent(interval=1) mem_percent = psutil.virtual_memory().percent cursor = conn.cursor() cursor.execute('INSERT INTO data (cpu, memory) VALUES (%s, %s)', (cpu_percent, mem_percent)) conn.commit() time.sleep(1) conn.close() ``` 4. 使用Ajax实现前端页面与后端的数据交互,定时获取mysql中的数据并更新折线图 在前面的index.html模板文件中已经使用Ajax定时获取数据并更新折线图。 ```javascript setInterval(function() { $.ajax({ url: '/data', success: function(data) { var xAxisData = []; var cpuData = []; var memData = []; for(var i = 0; i < data.length; i++) { xAxisData.push(data[i].time); cpuData.push(data[i].cpu); memData.push(data[i].memory); } myChart.setOption({ xAxis: { data: xAxisData }, series: [ { name: 'CPU使用率', data: cpuData }, { name: '内存使用率', data: memData } ] }); } }); }, 1000); ``` 以上就是使用Flask+mysql+html搭建CPU内存实时监控折线图功能的大致步骤。需要注意的是,由于采集系统CPU和内存使用率的Python脚本需要长时间运,可以使用supervisor等工具进进程管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿桂天山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值