Python在线健身数据统计系统

在这个数字化时代,健身爱好者们越来越注重数据的记录与分析。为了更好地追踪健身进度,我们决定用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爬虫教程PDF,Python爬虫书PDF

2026年09月02日

31阅读

外国教程python,python编程教学视频

2026年09月02日

26阅读

python简明教程沈洁元,python详细基础教程

2026年09月02日

21阅读

python库包教程,python 包

2026年09月02日

27阅读

python教程大全集,python教程600集

2026年09月02日

27阅读

python入门教程完整版,python零基础入门全套教程视频

2026年09月02日

23阅读