HabitTracker/app.py
Yapollon cc8f2f56a1 Fixed get_all()
and added delete methods for user and habits
2024-01-17 11:23:22 +01:00

133 lines
3.0 KiB
Python

import datetime
import hashlib
from flask import Flask, render_template, redirect, url_for, request
from flask_login import login_required, LoginManager, login_user, logout_user, current_user
from models.Habit import Habit
from models.User import User
from utils import anonymous_required
# Create a new Flask instance
app = Flask(__name__)
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)
# Create a new route
@app.route('/')
def index():
# return 'Hello World'
return render_template('index.html', title='Home', utc_dt=datetime.datetime.now().strftime("%d.%m.%Y %H:%M:%S"))
@app.route('/test')
@login_required
def secret():
return 'Pssst!'
@app.route('/login')
@anonymous_required
def login():
return render_template('auth/login.html', errors={})
@app.route('/signup')
@anonymous_required
def signup():
return render_template('auth/signup.html', errors={})
@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.'
if errors:
return render_template(
'auth/signup.html',
email=email,
name=name,
password=password,
errors=errors
)
# Save user to database. Maybe log the user in directly.
user = User.create(name, email, password)
login_user(user)
# Redirect to login page
return redirect(url_for('index'))
@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)
# Redirect to login page
return redirect(url_for('index'))
@app.route('/logout')
@login_required
def logout():
# Log out functionality
logout_user()
return redirect(url_for('index'))
# Run the application
if __name__ == '__main__':
app.run(port=5000, debug=True)