from functools import wraps from flask import Flask, render_template, redirect, request, url_for, session, flash from flask_mail import Mail from flask_sqlalchemy import SQLAlchemy from werkzeug.security import generate_password_hash, check_password_hash from sqlalchemy.exc import IntegrityError app = Flask(__name__) # email_option = str(0) # email = str(0) # password = str(0) # with app.app_context(): # print("--- Server Initialization ---") # response = input("Set the email and password type 'skip' to skip this: ") # if response.lower() != "skip": # email = input("Enter your email") # password = input("Enter your emails password") # print(f"Server started. Current role is: {email}\n") app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///accounts.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False app.secret_key = 'this key is so secret noone will ever get it 👌' 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('sign in to view that page.') return redirect(url_for('signin')) return view_func(*args, **kwargs) return wrapped from sqlalchemy.exc import IntegrityError @app.route('/submit-form', methods=['POST']) def handle_submission(): form_username = (request.form.get('username') or '').strip() form_email = (request.form.get('email') or '').strip().lower() form_password = request.form.get('password') or '' if not form_username or not form_email or not form_password: return render_template('signup.html', error="All fields must be entered to complete registration"), 400 if len(form_password) < 8: return render_template('signup.html', error="Password must be at least 8 characters"), 400 if User.query.filter_by(username=form_username).first(): return render_template('signup.html', user_taken="Username has already been taken"), 400 if User.query.filter_by(email=form_email).first(): return render_template('signup.html', email_taken="Email has already been used before"), 400 hashed_password = generate_password_hash(form_password) new_user = User(username=form_username, email=form_email, password_hash=hashed_password) try: db.session.add(new_user) db.session.commit() except IntegrityError: db.session.rollback() return render_template('signup.html', error="Username or email has already taken"), 400 return render_template('signup.html', success_message="Account successfully created") @app.route('/users') def view_users(): all_users = User.query.all() html_output = "
| ID | Username | |
|---|---|---|
| {user.id} | {user.username} | {user.email} |