目录
模板文件(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的编程语言爱好者。
————————————————