用python实现健康管理系统(附源码)

目录

项目结构

模板文件(templates/login.html)

模板文件(templates/dashboard.html)

模板文件(templates/add_record.html)


一个简单的基于Python的健康管理系统示例,它可以实现用户信息管理、健康数据记录(如体重、血压等)以及数据查询等基本功能。示例中使用了字典来模拟数据库存储数据,实际应用中可能需要连接真正的数据库(如MySQL、SQLite等)
    
这个示例提供了一个基础的健康管理系统,包括用户注册、登录和记录健康数据的功能。你可以根据需要扩展更多的功能,如数据可视化、用户健康报告等。

项目结构

health_management_system/
│
├── app.py
├── static/
│   └── style.css
├── templates/
│   ├── base.html
│   ├── index.html
│   ├── login.html
│   └── dashboard.html
└── database.db


步骤1:设置Flask应用

首先,确保你已经安装了Flask和SQLite库。如果没有安装,可以使用以下命令安装:

pip install Flask flask_sqlalchemy
步骤2:创建数据库模型

app.py中,首先配置Flask应用,并定义数据库模型。

from flask import Flask, render_template, redirect, url_for, flash, request
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    password = db.Column(db.String(120), nullable=False)

class HealthRecord(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    weight = db.Column(db.Float, nullable=False)
    blood_pressure = db.Column(db.String(10), nullable=False)  # e.g., "120/80"
    date = db.Column(db.Date, nullable=False)

@app.route('/')
def index():
    return render_template('index.html')

if __name__ == '__main__':
    db.create_all()
    app.run(debug=True)
步骤3:创建登录和注册功能

接下来,我们添加登录和注册页面及其功能。

模板文件(templates/login.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Login</title>
    <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
    <div class="container">
        <h2>Login</h2>
        <form method="POST" action="{{ url_for('login') }}">
            <label for="username">Username:</label>
            <input type="text" id="username" name="username" required>
            <label for="password">Password:</label>
            <input type="password" id="password" name="password" required>
            <button type="submit">Login</button>
        </form>
        <p>Don't have an account? <a href="{{ url_for('register') }}">Register here</a></p>
    </div>
</body>
</html>


模板文件(templates/register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Register</title>
    <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
    <div class="container">
        <h2>Register</h2>
        <form method="POST" action="{{ url_for('register') }}">
            <label for="username">Username:</label>
            <input type="text" id="username" name="username" required>
            <label for="password">Password:</label>
            <input type="password" id="password" name="password" required>
            <button type="submit">Register</button>
        </form>
        <p>Already have an account? <a href="{{ url_for('login') }}">Login here</a></p>
    </div>
</body>
</html>
添加路由和表单处理

app.py中添加以下代码:

from flask_bcrypt import Bcrypt
from datetime import date

bcrypt = Bcrypt(app)

@app.route('/register', methods=['GET', 'POST'])
def register():
    if request.method == 'POST':
        hashed_password = bcrypt.generate_password_hash(request.form['password']).decode('utf-8')
        user = User(username=request.form['username'], password=hashed_password)
        db.session.add(user)
        db.session.commit()
        flash('Your account has been created! You are now able to log in', 'success')
        return redirect(url_for('login'))
    return render_template('register.html')

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        user = User.query.filter_by(username=request.form['username']).first()
        if user and bcrypt.check_password_hash(user.password, request.form['password']):
            flash('You have been logged in!', 'success')
            return redirect(url_for('dashboard'))
        else:
            flash('Login Unsuccessful. Please check username and password', 'danger')
    return render_template('login.html')

@app.route('/dashboard')
def dashboard():
    user = User.query.filter_by(username=request.form['username']).first()  # Fix: Implement session-based authentication
    records = HealthRecord.query.filter_by(user_id=user.id).all()
    return render_template('dashboard.html', records=records)
步骤4:创建用户仪表板
模板文件(templates/dashboard.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Dashboard</title>
    <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
    <div class="container">
        <h2>Welcome to Your Dashboard</h2>
        <h3>Your Health Records</h3>
        <table>
            <thead>
                <tr>
                    <th>Date</th>
                    <th>Weight</th>
                    <th>Blood Pressure</th>
                </tr>
            </thead>
            <tbody>
                {% for record in records %}
                <tr>
                    <td>{{ record.date }}</td>
                    <td>{{ record.weight }} kg</td>
                    <td>{{ record.blood_pressure }}</td>
                </tr>
                {% endfor %}
            </tbody>
        </table>
        <a href="{{ url_for('add_record') }}">Add New Record</a>
    </div>
</body>
</html>


步骤5:添加健康记录

模板文件(templates/add_record.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Add Record</title>
    <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
    <div class="container">
        <h2>Add New Health Record</h2>
        <form method="POST" action="{{ url_for('add_record') }}">
            <label for="weight">Weight:</label>
            <input type="number" step="0.1" id="weight" name="weight" required>
            <label for="blood_pressure">Blood Pressure:</


 全套Python学习资料分享:

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

图片

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,还有环境配置的教程,给大家节省了很多时间。

图片

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

图片

四、入门学习视频全套

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

图片

图片

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

图片

图片

在这里插入图片描述

最后

如果你也想自学Python,可以关注我。我会把踩过的坑分享给你,让你不要踩坑,提高学习速度,还整理出了一套系统的学习路线,这套资料涵盖了诸多学习内容:开发工具,基础视频教程,项目实战源码,51本电子书籍,100道练习题等。相信可以帮助大家在最短的时间内,能达到事半功倍效果,用来复习也是非常不错的。

全套资料已经打包好了,朋友们如果需要可以搓蓝色字体免费获得【保证100%免费】

希望这篇文章对你有帮助,也希望能帮到大家,因为你我都是热爱python的编程语言爱好者。
————————————————

### 解决 PyCharm 终端中的 `CondaError` 当在 PyCharm 终端中遇到 `CondaError: Run 'conda init' before 'conda activate'` 的错误时,这通常意味着 Conda 初始化未成功完成。以下是详细的解决方案: #### 确认管理员权限 如果之前尝试过执行 `conda init` 但仍收到相同错误,则可能是由于命令行窗口缺乏足够的权限。建议以管理员身份启动命令提示符 (CMD),并再次运行 `conda init` 和后续激活命令[^3]。 ```bash conda init ``` #### 验证环境变量配置 确保 Anaconda 或 Miniconda 安装目录及其子文件夹 (`Scripts`, `condabin`) 已被正确添加到系统的 PATH 变量中。对于安装位置为 `E:\14anaconda` 的情况,应确认如下路径存在于 Path 中[^5]: - `E:\14anaconda` - `E:\14anaconda\Scripts` - `E:\14anaconda\condabin` 可以通过以下方式检查和修改 Windows 上的环境变量设置: 1. 打开“控制面板” 2. 寻找并点击“系统”下的高级系统设置链接 3. 在弹出对话框里选择“环境变量...” #### 更新 PyCharm 设置 即使解决了上述问题,在某些情况下仍需调整 IDE 自身的相关选项来使更改生效。具体来说,可能需要更新 PyCharm 对解释器的选择以及终端模拟器的行为模式。前往 **File -> Settings -> Tools -> Terminal**, 查看 Shell path 是否指向经过适当初始化后的 CMD.exe 或者 PowerShell 实例;另外还需保证所选 Python 解释器对应于已通过 `conda init` 正确初始化过的 base/root environment 下的可执行程序副本。 #### 测试修正效果 最后一步是在 PyCharm 内部打开一个新的终端会话,并试着激活目标虚拟环境验证是否还有同样的报错现象发生。假设想要切换至名为 "python37" 的环境中去工作的话,那么应该能够顺利地输入下面这条指令而不再遭遇之前的异常状况了[^4]: ```bash conda activate python37 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值