You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python(Flask/MySQL)实现服务端DataTables的编辑删除功能

Flask+MySQL实现DataTables服务端编辑、删除功能

1. 后端新增编辑、删除接口

在现有Flask代码中新增两个路由,分别处理数据更新和删除请求:

# 编辑数据接口
@app.route("/edit_record", methods=["POST"])
def edit_record():
    try:
        cursor = mysql.connection.cursor(MySQLdb.cursors.DictCursor)
        # 接收前端传递的参数
        record_id = request.form['id_ates']
        tes1 = request.form['tes1']
        tes2 = request.form['tes2']
        tes3 = request.form['tes3']
        
        # 执行更新语句
        cursor.execute("""
            UPDATE ates 
            SET tes1 = %s, tes2 = %s, tes3 = %s 
            WHERE id_ates = %s
        """, (tes1, tes2, tes3, record_id))
        mysql.connection.commit()
        
        return jsonify({"success": True, "msg": "更新成功"})
    except Exception as e:
        mysql.connection.rollback()
        return jsonify({"success": False, "msg": f"更新失败:{str(e)}"})
    finally:
        cursor.close()

# 删除数据接口
@app.route("/delete_record", methods=["POST"])
def delete_record():
    try:
        cursor = mysql.connection.cursor(MySQLdb.cursors.DictCursor)
        record_id = request.form['id_ates']
        
        cursor.execute("DELETE FROM ates WHERE id_ates = %s", (record_id,))
        mysql.connection.commit()
        
        return jsonify({"success": True, "msg": "删除成功"})
    except Exception as e:
        mysql.connection.rollback()
        return jsonify({"success": False, "msg": f"删除失败:{str(e)}"})
    finally:
        cursor.close()

2. 前端新增编辑模态框、修改DataTables配置

2.1 新增编辑弹窗HTML代码

在现有页面HTML中加入编辑用的模态框:

<!-- 编辑模态框 -->
<div class="modal fade" id="editModal" tabindex="-1" role="dialog">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title">编辑数据</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        <input type="hidden" id="edit_id">
        <div class="form-group">
          <label>tes1</label>
          <input type="text" class="form-control" id="edit_tes1">
        </div>
        <div class="form-group">
          <label>tes2</label>
          <input type="text" class="form-control" id="edit_tes2">
        </div>
        <div class="form-group">
          <label>tes3</label>
          <input type="text" class="form-control" id="edit_tes3">
        </div>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-primary" id="saveEditBtn">保存</button>
        <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
      </div>
    </div>
  </div>
</div>

2.2 修改JS代码,添加操作列和交互逻辑

修改原有DataTables初始化代码,增加操作列渲染、编辑删除交互:

$(document).ready(function() {
    // 保存DataTables实例,方便后续刷新
    var table = $('#datatables').DataTable({
        "processing": true,
        "serverSide": true,
        "ajax": {
            "url": "{{ url_for('ajaxfiletest') }}",
            "type": 'POST'
        },
        "columns": [
            {"data": "id_ates"},
            {"data": "tes1"},
            {"data": "tes2"},
            {"data": "tes3"},
            {
                "data": null,
                "render": function(data, type, row) {
                    // 渲染编辑、删除按钮,绑定行数据id
                    return `<button class="edit-btn btn btn-sm btn-info" data-id="${row.id_ates}" data-tes1="${row.tes1}" data-tes2="${row.tes2}" data-tes3="${row.tes3}">编辑</button> 
                            <button class="delete-btn btn btn-sm btn-danger" data-id="${row.id_ates}">删除</button>`;
                }
            }
        ]
    });

    // 编辑按钮点击事件
    $('#datatables').on('click', '.edit-btn', function() {
        // 把行数据填充到模态框
        $('#edit_id').val($(this).data('id'));
        $('#edit_tes1').val($(this).data('tes1'));
        $('#edit_tes2').val($(this).data('tes2'));
        $('#edit_tes3').val($(this).data('tes3'));
        $('#editModal').modal('show');
    });

    // 保存编辑事件
    $('#saveEditBtn').click(function() {
        $.post("{{ url_for('edit_record') }}", {
            id_ates: $('#edit_id').val(),
            tes1: $('#edit_tes1').val(),
            tes2: $('#edit_tes2').val(),
            tes3: $('#edit_tes3').val()
        }, function(res) {
            if(res.success) {
                alert(res.msg);
                $('#editModal').modal('hide');
                table.ajax.reload(); // 刷新表格
            } else {
                alert(res.msg);
            }
        })
    })

    // 删除按钮点击事件
    $('#datatables').on('click', '.delete-btn', function() {
        var recordId = $(this).data('id');
        if(confirm('确认删除该条数据?')) {
            $.post("{{ url_for('delete_record') }}", {id_ates: recordId}, function(res) {
                if(res.success) {
                    alert(res.msg);
                    table.ajax.reload();
                } else {
                    alert(res.msg);
                }
            })
        }
    })
});

3. 依赖说明

如果用到了Bootstrap模态框,需要提前引入Bootstrap的CSS和JS文件,没有的话可以自行替换成原生弹窗表单实现。

内容的提问来源于stack exchange,提问作者GW99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:15:00