Files
hypochonderportal/app.py
2025-11-10 19:39:11 +01:00

172 lines
6.0 KiB
Python

# app.py
from flask import Flask, render_template, request, redirect, url_for, session, flash
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
import os
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key-here'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///health_tracker.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
# User model
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
password = db.Column(db.String(120), nullable=False)
created_at = db.Column(db.DateTime, default=datetime.utcnow)
records = db.relationship('HealthRecord', backref='user', lazy=True)
# Health record model
class HealthRecord(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
illness_name = db.Column(db.String(200), nullable=False)
diagnosis_date = db.Column(db.Date, nullable=False)
severity = db.Column(db.String(20), nullable=False)
treatment = db.Column(db.String(300))
description = db.Column(db.Text)
created_at = db.Column(db.DateTime, default=datetime.utcnow)
# Create tables
with app.app_context():
db.create_all()
@app.route('/')
def index():
if 'user_id' in session:
user = User.query.get(session['user_id'])
return redirect(url_for('dashboard', user=user))
return render_template('index.html')
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
username = request.form['username']
email = request.form['email']
password = request.form['password']
# Check if user already exists
existing_user = User.query.filter_by(username=username).first()
if existing_user:
flash('Username already exists', 'error')
return render_template('register.html')
existing_email = User.query.filter_by(email=email).first()
if existing_email:
flash('Email already registered', 'error')
return render_template('register.html')
# Create new user
new_user = User(username=username, email=email, password=password)
db.session.add(new_user)
db.session.commit()
flash('Registration successful! Please 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':
username = request.form['username']
password = request.form['password']
user = User.query.filter_by(username=username).first()
if user and user.password == password:
session['user_id'] = user.id
session['username'] = user.username
return redirect(url_for('dashboard'))
else:
flash('Invalid username or password', 'error')
return render_template('login.html')
@app.route('/logout')
def logout():
session.pop('user_id', None)
session.pop('username', None)
flash('You have been logged out', 'info')
return redirect(url_for('index'))
@app.route('/dashboard')
def dashboard():
if 'user_id' not in session:
return redirect(url_for('login'))
user = User.query.get(session['user_id'])
records = HealthRecord.query.filter_by(user_id=user.id).order_by(HealthRecord.diagnosis_date.desc()).all()
# Calculate statistics
total_records = len(records)
recovered = sum(1 for record in records if 'recovered' in record.description.lower() or 'healed' in record.description.lower())
active = total_records - recovered
return render_template('dashboard.html', user=user, records=records, total_records=total_records, recovered=recovered, active=active)
@app.route('/add_record', methods=['GET', 'POST'])
def add_record():
if 'user_id' not in session:
return redirect(url_for('login'))
if request.method == 'POST':
illness_name = request.form['illness_name']
diagnosis_date = datetime.strptime(request.form['diagnosis_date'], '%Y-%m-%d')
severity = request.form['severity']
treatment = request.form['treatment']
description = request.form['description']
new_record = HealthRecord(
user_id=session['user_id'],
illness_name=illness_name,
diagnosis_date=diagnosis_date,
severity=severity,
treatment=treatment,
description=description
)
db.session.add(new_record)
db.session.commit()
flash('Health record added successfully!', 'success')
return redirect(url_for('dashboard'))
return render_template('add_record.html')
@app.route('/edit_record/<int:record_id>', methods=['GET', 'POST'])
def edit_record(record_id):
if 'user_id' not in session:
return redirect(url_for('login'))
record = HealthRecord.query.get_or_404(record_id)
# Verify user owns this record
if record.user_id != session['user_id']:
flash('Access denied', 'error')
return redirect(url_for('dashboard'))
if request.method == 'POST':
record.illness_name = request.form['illness_name']
record.diagnosis_date = datetime.strptime(request.form['diagnosis_date'], '%Y-%m-%d')
record.severity = request.form['severity']
record.treatment = request.form['treatment']
record.description = request.form['description']
db.session.commit()
flash('Health record updated successfully!', 'success')
return redirect(url_for('dashboard'))
return render_template('edit_record.html', record=record)
@app.route('/delete_record/<int:record_id>', methods=['POST'])
def delete_record(record_id):
if 'user_id' not in session:
return redirect(url_for('login'))
record = HealthRecord.query.get_or_404(record