当前位置: 首页 > news >正文

212-基于Python的老人健康管理系统

基于 Python 的老人健康管理系统:从技术选型到功能落地的完整实践

一款面向老年人健康管理场景的 Flask 全栈项目,聚焦用户多角色协作、健康报告、数据可视化与基础运营能力,适合作为课程设计/毕业设计/业务快速原型。


目录

  • 项目背景与亮点
  • 系统功能清单(基于实际实现)
  • 项目目录结构
  • 技术栈与依赖说明
  • 本地快速启动
  • 数据库初始化与迁移
  • 关键模块与核心代码
  • 可视化展示(预留位)
  • 常见问题(FAQ)
  • 结语与联系我

项目背景与亮点

  • 面向“老人-家属-医生-管理员”多角色协作的健康管理系统。
  • 基于 Flask + SQLAlchemy 快速构建,MySQL 持久化,前端以模板+静态资源为主。
  • 内置登录/注册、角色鉴权、健康报告、药品/药品类型管理、轮播与公告等。
  • 前端集成多种图表库(ECharts/Chart.js/ApexCharts/C3/Flot/Morris)便于扩展可视化。

系统功能清单(基于实际实现)

  • 用户注册与登录
    • 新用户注册(管理员/医生/老人/家属),校验用户名/手机号唯一性
    • 账号登录(用户名+密码+角色校验,状态校验)
    • 安全退出(会话清理)
    • 登录后修改密码(验证原密码)
  • 首页与导航
    • 系统总览(用户/老人/医生/家属统计)
    • 轮播图展示、公告列表、医生信息展示
    • 角色化侧边导航
  • 角色与数据管理
    • 管理员:老人/家属/医生数据管理,公告、轮播、健康报告、药品/药品类型维护,绑定关系管理
    • 医生:管理名下老人、健康报告、药品/药品类型
    • 老人:查看绑定的医生/家属、药品与健康报告
    • 家属:查看绑定老人、健康报告与用药信息
  • 健康报告与可视化
    • 健康报告录入/查看
    • 首页与模块页具备基础统计图表(ECharts等)

注:本项目聚焦“老人健康管理”,不包含诗词/AI写诗等无关功能。


项目目录结构

health/app.pyblueprints/admin.pydoctor.pyelder.pyfamily.pyconfig.pydependency.txtdesign_212_health.sqlmodels.pytemplates/base.htmlindex.htmllogin.htmlregister.htmllogout.htmlchange_password.htmladmin/ ...(公告/轮播/老人/家属/医生/报告/药品 等)doctor/ ...(名下老人、报告、药品 等)elder/ ...(绑定/报告/药品)family/ ...(绑定老人、报告、药品)static/js/(ECharts、Chart.js、ApexCharts、C3、Flot、Morris 等)css/ images/ uploads/ assets/ dist/ ...

项目演示

212-基于Python的老人健康管理系统

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

技术栈与依赖说明

  • 后端
    • Flask(Web 框架)
    • Flask-SQLAlchemy(ORM)
    • Flask-Migrate(迁移)
    • Flask-WTF(表单)
    • flask_cors(跨域)
    • PyMySQL(MySQL 驱动)
    • werkzeug.security(密码哈希)
  • 数据库
    • MySQL(mysql+pymysql
  • 前端
    • Jinja2 模板
    • jQuery / Bootstrap
    • 图表库:ECharts、Chart.js、ApexCharts、C3.js、Flot、Morris.js
  • 数据分析库
    • pandas 在依赖中声明,但当前代码库未直接 import/使用
    • numpy 未使用

依赖文件(节选):

pip install flask==3.0.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install flask-migrate==4.0.4 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install flask-sqlalchemy==3.0.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install flask-wtf==1.2.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pandas==1.1.5 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pymysql==1.0.3 -i https://pypi.tuna.tsinghua.edu.cn/simple

本地快速启动

  1. 克隆/下载项目后,创建并激活虚拟环境(可选)。
  2. 安装依赖:
pip install -r <(sed 's/^pip install //; s/ -i .*//;' dependency.txt)  # Linux/macOS zsh/bash
# 或手动执行 dependency.txt 中的 pip install 命令(Windows/PowerShell)
  1. 配置数据库连接:编辑 config.py,确保账号、密码、库名正确。
HOSTNAME = 'localhost'
DATABASE = 'design_212_health'
PORT = 3306
USERNAME = 'root'
PASSWORD = '123456'
DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)SQLALCHEMY_DATABASE_URI = DB_URL
SQLALCHEMY_TRACK_MODIFICATIONS = False
  1. 初始化数据库(见下文“数据库初始化与迁移”)。
  2. 运行:
python app.py  # 如 app.py 已配置运行入口或通过 Flask 运行

数据库初始化与迁移

  • 直接导入 SQL:将 design_212_health.sql 导入到 MySQL 数据库(推荐用于快速体验)。
  • 或使用迁移(如已集成 Flask-Migrate,可按如下思路):
flask db init
flask db migrate -m "init"
flask db upgrade

模型定义(节选):

db = SQLAlchemy()# 用户表(User)
class User(db.Model):__tablename__ = 'user'user_id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='用户ID')username = db.Column(db.String(50), unique=True, nullable=False, comment='用户名')password = db.Column(db.String(255), nullable=False, comment='密码')role = db.Column(db.Enum('admin', 'doctor', 'elder', 'family'), nullable=False,comment='用户角色(管理员、医生、老人、家属)')avatar_url = db.Column(db.String(255), default=None, comment='头像URL地址')email = db.Column(db.String(100), unique=True, default=None, comment='电子邮箱')phone = db.Column(db.String(20), default=None, comment='电话号码')reset_token = db.Column(db.String(100), default=None, comment='找回密码的临时token')reset_token_expire = db.Column(db.DateTime, default=None, comment='reset_token的过期时间')status = db.Column(db.Enum('active', 'disabled'), default='active', comment='账号状态(激活/禁用)')created_at = db.Column(db.DateTime, default=datetime.utcnow, comment='账号创建时间')

关键模块与核心代码

身份认证:登录/注册/首页

登录:

# 登录页面
@app.route('/login', methods=['GET', 'POST'])
def login():if request.method == 'POST':username = request.form.get('username')password = request.form.get('password')role = request.form.get('role')user = User.query.filter_by(username=username).first()if not user:message = "用户不存在"return render_template('login.html', message=message)elif user.status == 'disabled':message = "账号已被禁用,请联系管理员"return render_template('login.html', message=message)elif not check_password_hash(user.password, password):message = "密码错误"return render_template('login.html', message=message)elif user.role != role:message = "角色错误"return render_template('login.html', message=message)# 登录成功,将用户名和角色存入 sessionsession['username'] = user.usernamesession['role'] = user.role# ... 省略:按角色写入 session['name']return redirect(url_for('index'))return render_template('login.html')

注册(字段校验、唯一性校验、角色默认头像):

@app.route('/register', methods=['GET', 'POST'])
def register():if request.method == 'POST':username = request.form.get('username')password = request.form.get('password')email = request.form.get('email')phone = request.form.get('phone')address = request.form.get('address')role = request.form.get('role')# ... 省略:字段校验与唯一性校验hashed_password = generate_password_hash(password)# 根据角色设置头像 URLif role == 'doctor':avatar_url = 'static/uploads/doctor/default.jpg'elif role == 'elder':avatar_url = 'static/uploads/elder/default.jpg'elif role == 'family':avatar_url = 'static/uploads/family/default.jpg'else:avatar_url = 'static/uploads/default.jpg'# ... 省略:创建用户与对应角色资料

首页统计与展示数据:

@app.route('/')
def index():username = session.get('username')if username:user = User.query.filter_by(username=username).first()user_count = User.query.count()elder_count = Elder.query.count()family_count = Family.query.count()doctor_count = Doctor.query.count()carousels = Carousel.query.order_by(Carousel.order_index).all()announcements = Announcement.query.all()doctors = Doctor.query.all()return render_template('index.html',username=username,user=user,user_count=user_count,elder_count=elder_count,family_count=family_count,doctor_count=doctor_count,carousels=carousels,announcements=announcements,doctors=doctors)else:return redirect(url_for('login'))
业务模块:蓝图划分
blueprints/admin.py   # 管理员:公告/轮播/人员/报告/药品/绑定管理doctor.py  # 医生:名下老人、报告、药品管理elder.py   # 老人:查看绑定医生/家属、药品、报告family.py  # 家属:查看绑定老人、报告、药品
前端模板:角色化导航与个人信息

侧边栏展示头像与名称(节选):

<div class="leftbar-user" style="text-align: center;"><a href="#" style="display: flex; flex-direction: column; align-items: center; text-decoration: none;"><img src="/{{ user.avatar_url }}" alt="user-image" height="42" class="rounded-circle shadow-sm" style="margin-bottom: 5px;"><span style="color: black; font-weight: bold;">{{ session['name'] }}</span></a>
</div>
可视化:ECharts/Chart.js/ApexCharts 等

ECharts(示例函数):

function draw_chart(containerId, data) {var chart = echarts.init(document.getElementById(containerId));var option = {title: {left: 'center',top: 'top',textStyle: { color: '#2c3e50', fontSize: 24, fontFamily: 'Arial, sans-serif', fontWeight: 'bold' },subtextStyle: { color: '#7f8c8d', fontSize: 18, fontFamily: 'Arial, sans-serif' }},// ...

Chart.js(节选):

$(function() {/* ChartJS */'use strict';var data = {labels: ["2013", "2014", "2014", "2015", "2016", "2017"],datasets: [{label: '# of Votes',data: [10, 19, 3, 5, 2, 3],

ApexCharts(节选):

  var options1= {chart: { type: 'area', height: 60, sparkline: { enabled: true } },series: [ { data: [24, 66, 42, 88, 62, 24, 45, 12, 36, 10] } ],stroke: { curve: 'smooth', width: 3 },colors: ['#0e86e7'],

可视化展示(预留位)

这里提供可直接替换的数据与示例容器,便于快速接入真实数据。你可以在首页或统计页中引入这些容器。

HTML 容器示例(可放在 templates/index.html 或统计页):

<div class="row"><div class="col-md-6"><div id="viz_users_by_role" style="height:360px;"></div></div><div class="col-md-6"><canvas id="viz_reports_trend" height="360"></canvas></div>
</div>

ECharts 渲染示例(挂到 static/js/mychart.js 或新建 static/js/viz.js):

function renderUsersByRole(containerId, stats) {const chart = echarts.init(document.getElementById(containerId));chart.setOption({title: { text: '各角色用户数量' },tooltip: { trigger: 'item' },series: [{ type: 'pie', radius: '60%', data: [{ name: '管理员', value: stats.admin },{ name: '医生', value: stats.doctor },{ name: '老人', value: stats.elder },{ name: '家属', value: stats.family },] }]});
}

Chart.js 渲染示例:

function renderReportsTrend(canvasId, xLabels, values) {const ctx = document.getElementById(canvasId).getContext('2d');new Chart(ctx, {type: 'line',data: { labels: xLabels, datasets: [{ label: '健康报告数', data: values, borderColor: '#0e86e7', fill: false }] },options: { scales: { yAxes: [{ ticks: { beginAtZero: true } }] } }});
}

后端提供数据接口(示例):

@app.route('/api/stats/overview')
def api_stats_overview():return jsonify({'admin': User.query.filter_by(role='admin').count(),'doctor': User.query.filter_by(role='doctor').count(),'elder': User.query.filter_by(role='elder').count(),'family': User.query.filter_by(role='family').count(),})

常见问题(FAQ)

  • Q: 依赖里的 pandas 会用到吗?
    • A: 目前未在代码中直接使用,后期可在报表/分析中加入。
  • Q: 支持哪些图表库?
    • A: 已引入 ECharts / Chart.js / ApexCharts / C3 / Flot / Morris,可按需选用。
  • Q: 如何添加新的角色能力?
    • A: 在 models.py 扩展数据模型,在 blueprints/*.py 补充路由与权限校验,在 templates/ 补充页面。

结语与联系我

如果这个项目对你有帮助,欢迎 Star / Fork / 交流共建。也欢迎将其作为课程/毕业设计的基础骨架,在此之上扩展更多健康数据指标与可视化能力。

联系方式:码界筑梦坊各大平台同名

http://www.dtcms.com/a/449598.html

相关文章:

  • 万能格式文件查看工具,支持查看图像、音视频和文档等,免安装超方便!
  • 做食品企业网站的费用wordpress文章图片全屏浏览
  • 韩国免费行情网站的推荐理由外贸 wordpress
  • 嵌入式开发核心知识点详解教程
  • 操作系统应用开发(二十六)RustDesk tls证书不匹配错误—东方仙盟筑基期
  • 如何制作个人网站住建局查询房产信息
  • 西安网站建设hyk123wordpress帖子添加代码
  • 乐理知识学习内容
  • 新手SEO教程:高效提升网站访问量的实用技巧与策略
  • 代码文件内容
  • 一款基于ESP32的导航小车
  • 自己建设网站赚钱湘潭网站建设 要选磐石网络
  • Python图形界面——TKinter
  • 深圳策划公司网站建设大型网站制作品牌
  • Django 配置与安装完整指南
  • seo网站优化方法网站建设技术指标
  • Javaweb(BeanUtils)
  • Oracle数据库imp/exp
  • 自己做的网站怎么上传手机百度网页版主页
  • 昆明网站定制建设项目验收在哪个网站公示
  • 大模型开发 - 01 Spring AI 核心特性一览
  • 手赚网 类似网站怎么建设在局域网内访问本机的asp网站
  • AS5600 驱动(HAL库400K硬件IIC+DMA、1MHZ软件IIC)
  • Oracle OCP认证考试题目详解082系列第1题
  • 做网站公司是干什么的安徽工程建设信息网实名制查询
  • Java EE初阶启程记12---synchronized 原理
  • 设计模式简要介绍
  • Python 数据结构综合速查:列表 / 字典 / 集合 / 元组对比
  • 宁波建设工程报名网站搭建一个网站的具体步骤
  • 第十七章:遍历万象,步步为营——Iterator的迭代艺术