Python在线健身数据统计系统
在这个数字化时代,健身爱好者们越来越注重数据的记录与分析。为了更好地追踪健身进度,我们决定用Python语言开发一个在线健身数据统计系统。本文将详细介绍系统的设计思路、功能实现以及使用方法。

系统设计思路
1. 需求分析
首先,我们需要明确系统的核心功能:
- 用户注册与登录
- 健身数据录入(如体重、心率、运动时长等)
- 数据可视化展示
- 进度跟踪与提醒
2. 技术选型
- 前端:使用HTML、CSS和JavaScript构建用户界面。
- 后端:采用Flask框架,利用Python处理数据逻辑。
- 数据库:使用SQLite存储用户信息和健身数据。
- 可视化:借助Matplotlib和Plotly生成图表。
功能实现
1. 用户注册与登录
用户注册时,系统会要求填写基本信息(如用户名、密码、邮箱等),并将数据存储到SQLite数据库中。登录时,系统会验证用户信息,成功后进入主界面。
from flask import Flask, request, redirect, url_for, session
from flask_sqlalchemy import SQLAlchemy
from werkzeug.security import generate_password_hash, check_password_hash
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///fitness.db'
app.config['SECRET_KEY'] = 'your_secret_key'
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_hash = db.Column(db.String(120), nullable=False)
@app.route('/register', methods=['POST'])
def register():
username = request.form['username']
password = request.form['password']
hashed_password = generate_password_hash(password)
new_user = User(username=username, password_hash=hashed_password)
db.session.add(new_user)
db.session.commit()
return redirect(url_for('login'))
@app.route('/login', methods=['POST'])
def login():
username = request.form['username']
password = request.form['password']
user = User.query.filter_by(username=username).first()
if user and check_password_hash(user.password_hash, password):
session['user_id'] = user.id
return redirect(url_for('dashboard'))
return 'Invalid username or password'
2. 健身数据录入
用户登录后,可以录入每天的健身数据,如体重、心率、运动时长等。这些数据同样存储在SQLite数据库中。
class FitnessData(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
date = db.Column(db.Date, nullable=False)
weight = db.Column(db.Float, nullable=False)
heart_rate = db.Column(db.Integer, nullable=False)
exercise_duration = db.Column(db.Integer, nullable=False)
@app.route('/add_data', methods=['POST'])
def add_data():
user_id = session['user_id']
date = request.form['date']
weight = request.form['weight']
heart_rate = request.form['heart_rate']
exercise_duration = request.form['exercise_duration']
new_data = FitnessData(user_id=user_id, date=date, weight=weight, heart_rate=heart_rate, exercise_duration=exercise_duration)
db.session.add(new_data)
db.session.commit()
return redirect(url_for('dashboard'))
3. 数据可视化展示
利用Matplotlib和Plotly生成图表,展示用户的健身数据变化趋势。
import matplotlib.pyplot as plt
import plotly.express as px
@app.route('/dashboard')
def dashboard():
user_id = session['user_id']
data = FitnessData.query.filter_by(user_id=user_id).all()
dates = [d.date for d in data]
weights = [d.weight for d in data]
fig = px.line(x=dates, y=weights, title='Weight Trend')
fig.show()
return 'Dashboard'
4. 进度跟踪与提醒
系统会根据用户设定的目标,定期发送进度提醒邮件。
import smtplib
from email.mime.text import MIMEText
def send_reminder(user_email, progress):
msg = MIMEText(f'Your current progress: {progress}%')
msg['Subject'] = 'Fitness Progress Reminder'
msg['From'] = 'your_email@example.com'
msg['To'] = user_email
with smtplib.SMTP('smtp.example.com') as server:
server.login('your_email@example.com', 'your_password')
server.sendmail(msg['From'], [msg['To']], msg.as_string())
@app.route('/reminder')
def reminder():
user_id = session['user
« 上一篇
Python打造个性化学习进度跟踪神器
下一篇 »
Python在线旅游攻略编辑器:轻松规划完美旅程