added a better way to show if username or email is taken

This commit is contained in:
ralphi3
2026-06-23 11:17:51 +12:00
parent f548957f6e
commit 7a6bf4d113
2 changed files with 44 additions and 13 deletions
+25 -12
View File
@@ -3,6 +3,7 @@ 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
from sqlalchemy.exc import IntegrityError
app = Flask(__name__)
@@ -25,29 +26,41 @@ 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.')
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')
form_email = request.form.get('email')
form_password = request.form.get('password')
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 are required"), 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 "<h3>Username taken!</h3>", 400
return render_template('signup.html', user_taken="Username has already been taken"), 400
if User.query.filter_by(email=form_email).first():
return "<h3>Email already registered!</h3>", 400
return render_template('signup.html', email_taken="Email has already been used"), 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()
try:
db.session.add(new_user)
db.session.commit()
except IntegrityError:
db.session.rollback()
return render_template('signup.html', error="Username or email already taken"), 400
return render_template('signup.html', success_message="Account successfully created")