基于Flask+Mysql+EasyUI的简单用户管理系统

1、系统实现功能

  1. 添加用户
  2. 查看用户
  3. 修改用户
  4. 删除用户

完整代码下载地址在最后,若显示链接不存在,可能是资源还没有审核,可私聊我发完整代码

2、功能实现

2.1 添加用户

构建添加用户的Flask接口add_user()

@app.route("/add/user", methods=["GET", "POST"])
def add_user():username = request.form.get("username")password = request.form.get("password")mobile = request.form.get("mobile")# 1、连接数据库conn = Connection(host="localhost",port=3306,user="root",password="3535",)cursor = conn.cursor()conn.select_db("mysql_learning")# 2、执行SQLsql = "INSERT INTO admins (username, password, mobile) VALUES (%s, %s, %s)"cursor.execute(sql, [username, password, mobile])conn.commit()# 3、关闭连接cursor.close()conn.close()data_list = get_users()return render_template("show_user.html", data_list=data_list)

编写添加用户的页面

采用弹出框的方式进行用户的添加。其中action="/add/user"就是上述构建的添加用户的接口地址

<!--添加用户弹出框--><div id="add-user" class="modify-dialog" data-options="closed:true" style="padding-left: 10px;"><form id="ff1" method="post" action="/add/user"><div style="margin-top: 5px;"><label>姓名:</label><input id="username1" class="easyui-validatebox" type="text" name="username"></div><br><div><label>密码:</label><input id="password1" class="easyui-validatebox" type="text" name="password"></div><br><div><label>电话:</label><input id="mobile1" class="easyui-validatebox" type="text" name="mobile"></div><br><div><input id="confirm" class="easyui-validatebox" type="submit" name="mobile"></div></form></div>

实现效果

在这里插入图片描述

2.2 显示用户

新建查询用户方法get_user

def get_users():# 1、连接数据库conn = Connection(host="localhost",port=3306,user="root",password="3535",)cursor = conn.cursor()conn.select_db("mysql_learning")# 2、执行SQLsql = "SELECT * FROM admins"cursor.execute(sql)data_list = cursor.fetchall()# 3、关闭连接cursor.close()conn.close()return data_list

新建Flask接口,调用该方法

@app.route("/show/user", methods=["GET"])
def show_user():data_list = get_users()return render_template("show_user.html", data_list=data_list)

/show/user接口,查询到用户的信息data_list之后,并携带信息,跳转到show_user.html页面

新建show_user.html页面

<div class="container" style="margin-top: 10px;"><h1>用户列表</h1><a style="float: right;margin-bottom: 10px;" id="btn-add" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-add'" onclick="addUser()">添加用户</a><table class="table table-striped table-bordered"><thead><tr><th>ID</th><th>姓名</th><th>密码</th><th>手机号</th></tr></thead><tbody>{% for item in data_list %}<tr><td style="width: 50px">{{ item[0] }}</td><td style="width: 100px">{{ item[1] }}</td><td style="width: 150px">{{ item[2] }}</td><td style="width: 100px">{{ item[3] }}</td><td style="width: 100px"><a id="btn-delete" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-remove'" onclick="deleteUser(this)">删除</a><a id="btn-modify" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-edit'" onclick="modifyUser(this)">修改</a></td></tr>{% endfor %}</tbody></table>
</div>

采用以下这种方式遍历用户数据

{% for item in data_list %}{% endfor %}

实现效果

在这里插入图片描述

2.3 修改用户

创建修改用户的Flask接口modify_user()

@app.route("/modify/user", methods=["POST"])
def modify_user():new_data = json.loads(request.form.get("data"))user_id = new_data.get('id')username = new_data.get('name')password = new_data.get('password')mobile = new_data.get('mobile')# 1、连接数据库conn = Connection(host="localhost",port=3306,user="root",password="3535",)cursor = conn.cursor()conn.select_db("mysql_learning")# 2、执行SQLprint("=====" + str(user_id))sql = "UPDATE admins SET username = %s, password = %s, mobile = %s WHERE id = %s"cursor.execute(sql, [username, password, mobile, user_id])conn.commit()cursor.close()conn.close()data_list = get_users()return render_template("show_user.html", data_list=data_list)

创建前端修改用户页面

依然采用弹出框的形式,进行修改用户

<div id="dd" class="modify-dialog" data-options="closed:true" style="padding-left: 10px;"><form id="ff" method="post"><div style="margin-top: 5px;"><label>姓名:</label><input id="username" class="easyui-validatebox" type="text" name="username"></div><br><div><label>密码:</label><input id="password" class="easyui-validatebox" type="text" name="password"></div><br><div><label>电话:</label><input id="mobile" class="easyui-validatebox" type="text" name="mobile"></div><br><a id="btn-confirm" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-remove'" onclick="confirmModifyUser(this)">确定</a><a id="btn-cancel" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-remove'" onclick="deleteUser(this)">取消</a></form></div>

首先,用户点击修改之后,弹出修改狂,修改狂要显示当前的用户信息,实现的jquery代码如下:

function modifyUser(button) {$('#dd').dialog({title: '修改用户',width: 400,height: 300,closed: false,cache: false,modal: true});// 获取按钮所在的行const row = button.closest('tr');const id_cell = row.getElementsByTagName('td')[0];modifyUserId = id_cell.textContent || id_cell.innerText;// 获取第一列的单元格const name_cell = row.getElementsByTagName('td')[1];// 获取单元格的文本内容const name = name_cell.textContent || name_cell.innerText;// 获取第一列的单元格const password_cell = row.getElementsByTagName('td')[2];// 获取单元格的文本内容const password = password_cell.textContent || password_cell.innerText;// 获取第一列的单元格const mobile_cell = row.getElementsByTagName('td')[3];// 获取单元格的文本内容const mobile = mobile_cell.textContent || mobile_cell.innerText;$('#username').val(name);$('#password').val(password);$('#mobile').val(mobile);}

上面代码中的modifyUserId ,是为了接收要修改的用户的id,因为id不在弹出框显示,要定义一个全局的变量modifyUserId 进行接收。实现效果如下:
在这里插入图片描述
接着用户,修改信息,点击确定进行用户信息的修改,点击确定之后触发以下函数:

function confirmModifyUser(){const name = $('#username').val();const password = $('#password').val();const mobile = $('#mobile').val();console.log(modifyUserId);let newData = {id: modifyUserId,name: name,password: password,mobile: mobile};let newDataJson = JSON.stringify(newData);$.post("/modify/user", {data: newDataJson}, function (){$.messager.alert("系统提示", "修改成功", "info");setTimeout(function () {history.go(0);}, 1000);})}

创建一个newData进行用户新的信息的接收,并且把newData转化为json格式的数据,方便flask后端进行接收。这里要注意,后端接收代码的编写:

new_data = json.loads(request.form.get("data"))
user_id = new_data.get('id')
username = new_data.get('name')
password = new_data.get('password')
mobile = new_data.get('mobile')

最终实现的效果如下:

在这里插入图片描述

2.4 删除用户

构建删除用户的接口del_user()

@app.route("/delete/user/<user_id>", methods=["POST"])
def del_user(user_id):# 1、连接数据库conn = Connection(host="localhost",port=3306,user="root",password="3535",)cursor = conn.cursor()conn.select_db("mysql_learning")# 2、执行SQLprint("=====" + str(user_id))sql = "DELETE FROM admins WHERE id = %s"cursor.execute(sql, user_id)conn.commit()cursor.close()conn.close()data_list = get_users()return render_template("show_user.html", data_list=data_list)

编写删除页面

给用户列表页面的删除按钮绑定删除事件deleteUser,并传递参数this,这里的this可以获取当前行的数据,下面的参数button就是行的参数,通过先获取按钮所在行,接着获取第一列的单元格,最后获取单元格的内容即是唯一标识符id

function deleteUser(button) {$.messager.confirm('确认', '您确认想要删除记录吗?', function (r) {if (r) {// 获取按钮所在的行const row = button.closest('tr');// 获取第一列的单元格const cell = row.getElementsByTagName('td')[0];// 获取单元格的文本内容const id = cell.textContent || cell.innerText;$.post("/delete/user/" + id, function () {$.messager.alert("系统提示", "删除成功", "info");setTimeout(function () {history.go(0);}, 1000);})}});}

当用户点击删除之后,首先弹出确认删除的提示框,再次确认才会删除信息。

现实效果如下

在这里插入图片描述
点击OK即可确认删除。

在这里插入图片描述

3、完整代码下载地址

https://download.csdn.net/download/WwLK123/89434139

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/27299.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

依赖自动装配

黑马程序员SSM框架 文章目录 1、依赖自动装配2、依赖自动装配的特征 1、依赖自动装配 IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配自动装配方式 按类型&#xff08;常用&#xff09;按名称按构造方法不启用自动装配 配置中使用bean标签auto…

使用 MPLS 解决 BGP 的路由黑洞

MPLS 协议并不会为通过 BGP 协议学习的路由条目分配标签号&#xff1b; 而是在访问这些 BGP 路由目标网段时&#xff0c;在流量中压入到达这些网段的 BGP 下一跳设备地址的标签号&#xff1b; 例&#xff1a;R2从BGP邻居5.5.5.5学习到6.6.6.0 网段的路由&#xff1b;R2在访问…

网络编程入门介绍:TCP 和 UDP

目录 简介TCP&#xff1a;传输控制协议 TCP 的特点TCP 如何工作TCP 示例TCP 实践样例 UDP&#xff1a;用户数据报协议 UDP 的特点UDP 如何工作UDP 示例UDP 实践样例 TCP 与 UDP 的比较总结 简介 在计算机网络中&#xff0c;TCP&#xff08;传输控制协议&#xff09;和 UDP&a…

2024年6月15日 十二生肖 今日运势

小运播报&#xff1a;2024年6月15日&#xff0c;星期六&#xff0c;农历五月初十 &#xff08;甲辰年庚午月庚戌日&#xff09;&#xff0c;法定节假日。 红榜生肖&#xff1a;兔、马、虎 需要注意&#xff1a;牛、鸡、龙 喜神方位&#xff1a;西北方 财神方位&#xff1a;…

AI 客服定制:LangChain集成订单能力

为了提高AI客服的问题解决能力&#xff0c;我们引入了LangChain自定义能力&#xff0c;并集成了订单能力。这使得AI客服可以根据用户提出的问题&#xff0c;自动调用订单接口&#xff0c;获取订单信息&#xff0c;并结合文本知识库内容进行回答。这种能力的应用&#xff0c;使得…

使用powershell筛选AD域控不能自主更改的用户并变更

# 查询“用户不能更改密码”为勾选状态的所有域用户&#xff0c;将域账户、姓名、勾选状态作为结果保存到C:\result\result.csvGet-ADUser -Filter * -Properties CannotChangePassword | Where-Object { $_.CannotChangePassword -eq $true } | Select SamAccountName, Name, …

班子考核评价的重要性与实施方法

在组织管理领域&#xff0c;班子考核评价是一项至关重要的工作&#xff0c;它不仅关系到组织的发展方向和速度&#xff0c;更直接影响到组织的凝聚力和战斗力。一个科学、公正、有效的班子考核评价体系&#xff0c;能够准确反映班子的工作成效&#xff0c;激励班子成员积极作为…

QML学习及实战

QML学习及实战&#xff08;更多内容&#xff09; 创建项目 3. 剩下的就是一路下一步即可 添加静态资源——图片 添加之后完成之后的路径 案列 || demo 可以参考的资料&#xff1a;https://github.com/gongjianbo/MyTestCode/blob/master/README.md 1. 文本省略号 Text {wi…

第二十三节:带你梳理Vue2:Vue插槽的认识和基本使用

前言: 通过上一节的学习,我们知道了如何将数据从父组件中传递到子组件中, 除了除了将数据作为props传入到组件中,Vue还允许传入HTML, Vue 实现了一套内容分发的 API&#xff0c;这套 API 的设计灵感源自 Web Components 规范草案&#xff0c;将 <slot> 元素作为承载分发…

系统思考与创新解决

结束了为期两天的《系统思考与创新解决》课程&#xff0c;专为上市公司中后台管理者设计。这次课程让我深刻感受到中后端管理者与前端管理者在心智模式上的显著差异。通过使用系统环路图&#xff0c;不仅揭示了这些差异&#xff0c;还探讨了如何利用这些见解来增强团队间的对话…

13. 第十三章 案例研究-选择数据结构

13. 案例研究-选择数据结构 到这里尼应该已经学会了Python的核心数据结构, 也见过了一些使用它们的算法. 如果你想要更多地了解算个发可以阅读第21章. 本章配合联系介绍一个案例分析, 帮你思考如何选择数据结构并如何使用它们.13.1 单词频率分析 1. 练习1 编写一个程序, 读入…

《站在2024年的十字路口:计算机专业是否仍是高考生的明智之选?》

文章目录 每日一句正能量前言行业竞争现状行业饱和度和竞争激烈程度[^3^]新兴技术的影响[^3^]人才需求的变化[^3^]行业创新动态如何保持竞争力 专业与个人的匹配度判断专业所需的技术能力专业核心课程对学生的要求个人兴趣和性格特点专业对口的职业发展要求实践和经验个人价值观…

vue+intro.js实现引导功能

前言&#xff1a; 使用 intro.js这个插件&#xff0c;来实现一个引导性的效果&#xff0c;适用场景&#xff0c;比如&#xff1a;新手引导页&#xff0c;操作说明等等 效果图&#xff1a; 官网地址&#xff1a;点我 实现步骤&#xff1a; 1、安装 npm install intro.js --sa…

【架构之路】聊聊什么是微服务

如何让大模型更聪明&#xff1f; 引言 微服务&#xff08;Microservices&#xff09;是一种软件架构风格&#xff0c;它将单一的应用程序拆分为多个小的服务&#xff0c;每个服务都是独立运行和部署的。每个微服务通常只专注于一个业务功能&#xff0c;具有自己的数据存储&…

JavaScript 实现数字计数器的动画效果

写JavaScript 实现数字递增的效果 在HTML页面实现数字计数器的动画效果&#xff0c;类似于页面上的计数器功能&#xff0c;可以控制递增速度和效果的流畅度。主要是显示数字时流畅度更好&#xff0c;页面没那么僵硬 1、第一种 设置每次增加的数量&#xff0c;我这里演示的是…

【UIDynamic-动力学-UIGravityBehavior-重力行为 Objective-C语言】

一、UIGravityBehavior,重力行为, 1.接下来啊,我们一个一个来做, 新建一个项目,叫做:01-重力, 接下来,我们在这个ViewController里边, ViewDidLoad:里边,先写一段简单的代码, 我们写这么一段简单的代码,新建一个红色的UIView,把它显示在屏幕上, UIView *redVie…

《征服数据结构》双端栈

摘要&#xff1a; 1&#xff0c;双端栈的介绍 2&#xff0c;双端栈的代码实现 1&#xff0c;双端栈的介绍 双端栈主要利用了“栈底位置不变&#xff0c;栈顶位置动态变化” 的特点&#xff0c;可以让两个栈共享一块存储空间。在前面我们讲到用数组实现栈的时候&#xff0c;如果…

2024最新流媒体在线音乐系统网站源码 音乐社区 多语言开心版

本文来自&#xff1a;2024最新流媒体在线音乐系统网站源码 音乐社区 多语言开心版 - 源码1688 应用介绍 简介&#xff1a; 2024最新流媒体在线音乐系统网站源码| 音乐社区 | 多语言 | 开心版 图片&#xff1a;

Hyper-V如何将文件复制到虚拟机?教您3个简单的方法!

需要将文件复制到虚拟机&#xff01; “大家好&#xff0c;有谁知道Hyper-V怎么将文件复制到虚拟机吗&#xff1f;我有一些文件&#xff0c;想要从主机中复制进虚拟机中&#xff0c;但是我不知道该怎么操作&#xff0c;有谁可以帮帮我吗&#xff1f;谢谢。” Hyper-V虚拟机可…

Python 使用 Tkinter库 设置 tkinter ttk 框架的背景颜色

Tkinter 设置 tkinter ttk 框架的背景颜色 在本文中&#xff0c;我们将介绍如何使用 Tkinter 在 tkinter ttk 框架中设置背景颜色。Tkinter 是 Python 中常用的 GUI 工具包&#xff0c;ttk 则是 Tkinter 中的一个模块&#xff0c;提供了一套更加现代化的控件。 Tkinter 简介 …