from functools import wraps from flask import Flask, render_template, redirect, request, url_for, session, flash from flask_sqlalchemy import SQLAlchemy from werkzeug.security import generate_password_hash, check_password_hash app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///accounts.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False app.secret_key = 'super_secret_session_encryption_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) email = db.Column(db.String(120), unique=True, nullable=False) password_hash = db.Column(db.String(128), nullable=False) with app.app_context(): db.create_all() def login_required(view_func): @wraps(view_func) def wrapped(*args, **kwargs): if 'user_id' not in session: flash('Please sign in to view that page.') return redirect(url_for('signin')) return view_func(*args, **kwargs) return wrapped @app.route('/submit-form', methods=['POST']) def handle_submission(): form_username = request.form.get('username') form_email = request.form.get('email') form_password = request.form.get('password') if User.query.filter_by(username=form_username).first(): return "

Username taken!

", 400 if User.query.filter_by(email=form_email).first(): return "

Email already registered!

", 400 hashed_password = generate_password_hash(form_password) new_user = User(username=form_username, email=form_email, password_hash=hashed_password) db.session.add(new_user) db.session.commit() return redirect(url_for('success')) @app.route('/users') @login_required def view_users(): all_users = User.query.all() html_output = "

Registered Accounts

" html_output += "" for user in all_users: html_output += f"" html_output += "
IDUsernameEmail
{user.id}{user.username}{user.email}
" if not all_users: return "

No accounts found in the database yet.

" return html_output @app.route('/') def home(): return render_template('index.html') @app.route('/bivariate') def bivariate(): return render_template('bivariate.html') @app.route('/about') def about(): return render_template('about.html') @app.route('/signin', methods=['GET', 'POST']) def signin(): if request.method == 'POST': form_username = request.form.get('username') form_password = request.form.get('password') user = User.query.filter_by(username=form_username).first() if user is None or not check_password_hash(user.password_hash, form_password): flash('Incorrect username or password.') return render_template('signin.html'), 401 session['user_id'] = user.id session['username'] = user.username return redirect(url_for('home')) return render_template('signin.html') @app.route('/logout') def logout(): session.clear() return redirect(url_for('home')) @app.route('/signup') def signup(): return render_template('signup.html') @app.route('/all_users') @login_required def all_users(): return render_template('all_users.html') @app.route('/success') def success(): return render_template('success.html') if __name__ == '__main__': app.run(debug=True)