HabitTracker/app.py

145 lines
3.3 KiB
Python
Raw Normal View History

2024-01-12 10:57:58 +01:00
import datetime
2024-01-12 16:53:03 +01:00
import hashlib
2024-01-12 10:57:58 +01:00
from flask import Flask, render_template, redirect, url_for, request
2024-01-12 16:53:03 +01:00
from flask_login import login_required, LoginManager, login_user, logout_user, current_user
2024-01-12 10:57:58 +01:00
from models.Habit import Habit
2024-01-12 10:57:58 +01:00
from models.User import User
2024-01-12 16:53:03 +01:00
from utils import anonymous_required
2024-01-12 10:57:58 +01:00
# Create a new Flask instance
app = Flask(__name__)
2024-01-12 16:53:03 +01:00
app.secret_key = 'PSSSSSHHHT!'
# Initialize the Flask-Login extension
login_manager = LoginManager()
login_manager.login_view = 'login'
login_manager.init_app(app)
@login_manager.user_loader
def load_user(user_id):
return User.get(user_id)
@app.context_processor
def inject_user():
return dict(user=current_user)
2024-01-12 10:57:58 +01:00
# Create a new route
@app.route('/')
def index():
# return 'Hello World'
2024-01-17 11:17:35 +01:00
"""
if current_user.is_authenticated:
habits = Habit.get_all(current_user.id)
else:
habits = []
"""
# habits = [("lesen", "eine Seite vor dem schlafen gehen"), ("sport", "3x Gym")]
return render_template(
'index.html',
title='Home',
utc_dt=datetime.datetime.now().strftime("%d.%m.%Y %H:%M:%S"),
#habits=habits
)
2024-01-12 10:57:58 +01:00
2024-01-12 16:53:03 +01:00
2024-01-12 10:57:58 +01:00
@app.route('/test')
@login_required
def secret():
return 'Pssst!'
2024-01-12 16:53:03 +01:00
2024-01-12 10:57:58 +01:00
@app.route('/login')
2024-01-12 16:53:03 +01:00
@anonymous_required
2024-01-12 10:57:58 +01:00
def login():
2024-01-12 16:53:03 +01:00
return render_template('auth/login.html', errors={})
2024-01-12 10:57:58 +01:00
@app.route('/signup')
2024-01-12 16:53:03 +01:00
@anonymous_required
2024-01-12 10:57:58 +01:00
def signup():
return render_template('auth/signup.html', errors={})
2024-01-12 16:53:03 +01:00
2024-01-12 10:57:58 +01:00
@app.route('/signup', methods=['POST'])
def signup_post():
email = request.form.get('email')
name = request.form.get('name')
password = request.form.get('password')
# Check for errors
errors = {}
if not email:
errors['email'] = 'Email is required.'
if not name:
errors['name'] = 'Name is required.'
if not password:
errors['password'] = 'Password is required.'
2024-01-12 16:53:03 +01:00
if errors:
return render_template(
'auth/signup.html',
email=email,
name=name,
password=password,
errors=errors
)
2024-01-12 10:57:58 +01:00
# Save user to database. Maybe log the user in directly.
2024-01-12 16:53:03 +01:00
user = User.create(name, email, password)
login_user(user)
# Redirect to login page
return redirect(url_for('index'))
2024-01-12 16:53:03 +01:00
@app.route('/login', methods=['POST'])
def login_post():
email = request.form.get('email')
password = request.form.get('password')
# Check for errors
errors = {}
if not email:
errors['email'] = 'Email is required.'
if not password:
errors['password'] = 'Password is required.'
# Check if user exists
user = User.get_by_email(email)
if not user:
errors['email'] = 'User does not exist.'
elif user.password is None or hashlib.sha256(password.encode()).hexdigest() != user.password:
errors['password'] = 'Password incorrect.'
if errors:
return render_template(
'auth/login.html',
email=email,
password=password,
errors=errors
)
login_user(user)
2024-01-12 10:57:58 +01:00
# Redirect to login page
return redirect(url_for('index'))
2024-01-12 10:57:58 +01:00
@app.route('/logout')
@login_required
def logout():
# Log out functionality
2024-01-12 16:53:03 +01:00
logout_user()
2024-01-12 10:57:58 +01:00
return redirect(url_for('index'))
# Run the application
if __name__ == '__main__':
app.run(port=5000, debug=True)