from flask import Blueprint, render_template, redirect, url_for, request, flash from flask_login import login_user, logout_user, login_required from . import db from .models import init_db_models # Import model classes (stored on init_db_models function) User = init_db_models.User auth_bp = Blueprint('auth', __name__) @auth_bp.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': username = request.form.get('username') password = request.form.get('password') user = User.query.filter_by(username=username).first() if not user or not user.check_password(password): flash('Invalid username or password.') return redirect(url_for('auth.login')) login_user(user) return redirect(url_for('main.index')) return render_template('login.html') @auth_bp.route('/logout') @login_required def logout(): logout_user() return redirect(url_for('auth.login')) @auth_bp.route('/register', methods=['GET', 'POST']) def register(): if request.method == 'POST': username = request.form.get('username') password = request.form.get('password') if User.query.filter_by(username=username).first(): flash('Username already exists.') return redirect(url_for('auth.register')) user = User(username=username) user.set_password(password) db.session.add(user) db.session.commit() flash('Registered successfully. Please log in.') return redirect(url_for('auth.login')) return render_template('register.html')