ARTICLE AD BOX
Im using flask to run a website, working across my personal imac (running macos 26) at home, and a windows pc (running win11) at college to code, storing all the code in github. Anyways, I run app.py from the windows PC and it loads the page perfectly fine without issues. However, if I come home, pull the code down from github onto my mac, and run it, i get a 404 error in my browser (flask is running but cant find any pages)
For reference below is my app.py and routes.py in case that helps at all
(app.py)
from flask import Flask import routes app = Flask(__name__) app.secret_key = 'your-secret-key-here' routes.register_routes(app) if __name__ == '__main__': app.run(debug=True)(routes.py)
from flask import render_template, request, redirect, url_for, flash, session from werkzeug.security import generate_password_hash, check_password_hash from dbconnector import database def register_routes(app): @app.route("/") def home(): return render_template("home.html") @app.route("/register", methods=['GET', 'POST']) def register(): if request.method == 'POST': name = request.form['name'] email = request.form['email'] phone = request.form['phone'] address = request.form['address'] password = request.form['password'] confirm_password = request.form['confirm-password'] terms = request.form.get('terms') if password != confirm_password: flash('Passwords do not match!', 'error') return render_template('register.html') if not terms: flash('You must agree to the terms and conditions!', 'error') return render_template('register.html') hashed_password = generate_password_hash(password) db = database() try: existing_user = db.queryDB("SELECT \"Client Email\" FROM Accounts WHERE \"Client Email\" = ?", [email]) if existing_user: flash('Email already registered!', 'error') return render_template('register.html') db.updateDB( "INSERT INTO Accounts (\"Client Name\", \"Client Email\", \"Client Phone\", \"Client Address\", \"Password\") VALUES (?, ?, ?, ?, ?)", [name, email, phone, address, hashed_password] ) flash('Registration successful! Please login.', 'success') return redirect(url_for('login')) except Exception as e: flash(f'Registration failed: {str(e)}', 'error') return render_template('register.html') return render_template("register.html") @app.route("/pricing") def pricing(): return render_template("pricing.html") @app.route("/Day-purchase") def day_purchase(): return render_template("Day-purchase.html") @app.route("/Week-purchase") def week_purchase(): return render_template("Week-Purchase.html") @app.route("/Core-purchase") def core_purchase(): return render_template("Core-Purchase.html") @app.route("/Plus-purchase") def plus_purchase(): return render_template("Plus-Purchase.html") @app.route("/Premium-purchase") def premium_purchase(): return render_template("Premium-Purchase.html") @app.route("/checkout", methods=['POST']) def checkout(): pass_type = request.form.get('pass_type') pass_name = request.form.get('pass_name') pass_price = request.form.get('pass_price') full_name = request.form.get('name') email = request.form.get('email') phone = request.form.get('phone') return render_template("checkout.html", pass_type=pass_type, pass_name=pass_name, pass_price=pass_price, full_name=full_name, email=email, phone=phone) @app.route("/checkout/process", methods=['POST']) def process_checkout(): try: pass_type = request.form['pass_type'] pass_name = request.form['pass_name'] pass_price = request.form['pass_price'] full_name = request.form['fullName'] email = request.form['email'] phone = request.form['phone'] billing_address = request.form['billingAddress'] card_name = request.form['cardName'] card_number = request.form['cardNumber'] expiry_date = request.form['expiryDate'] cvv = request.form['cvv'] terms = request.form.get('terms') marketing = request.form.get('marketing') if not terms: flash('You must agree to the terms and conditions!', 'error') return render_template("checkout.html", pass_type=pass_type, pass_name=pass_name, pass_price=pass_price) flash(f'Thank you {full_name}! Your {pass_name} purchase of £{pass_price} was successful. Check your email at {email} for confirmation details.', 'success') return redirect(url_for('home')) except Exception as e: flash(f'Purchase failed: {str(e)}', 'error') return render_template("checkout.html", pass_type=request.form.get('pass_type', ''), pass_name=request.form.get('pass_name', ''), pass_price=request.form.get('pass_price', '')) @app.route("/login", methods=['GET', 'POST']) def login(): if request.method == 'POST': email = request.form['email'] password = request.form['password'] db = database() try: user = db.queryDB("SELECT \"Client Name\", \"Client Email\", \"Password\" FROM Accounts WHERE \"Client Email\" = ?", [email]) if user: stored_password = user[0][2] user_name = user[0][0] if check_password_hash(stored_password, password): session['user_logged_in'] = True session['user_name'] = user_name session['user_email'] = email flash('Login successful!', 'success') return redirect(url_for('home')) else: flash('Invalid email or password!', 'error') else: flash('Invalid email or password!', 'error') except Exception as e: flash(f'Login failed: {str(e)}', 'error') return render_template("login.html") @app.route("/logout") def logout(): session.clear() flash('You have been logged out!', 'success') return redirect(url_for('home')) @app.route("/settings") def settings(): if not session.get('user_logged_in'): flash('Please login to access settings!', 'error') return redirect(url_for('login')) return render_template("settings.html") @app.route("/settings/update", methods=['POST']) def update_account(): if not session.get('user_logged_in'): return redirect(url_for('login')) name = request.form['name'] email = request.form['email'] phone = request.form.get('phone', '') address = request.form.get('address', '') db = database() try: db.updateDB( "UPDATE Accounts SET \"Client Name\" = ?, \"Client Email\" = ?, \"Client Phone\" = ?, \"Client Address\" = ? WHERE \"Client Email\" = ?", [name, email, phone, address, session['user_email']] ) session['user_name'] = name session['user_email'] = email flash('Account details updated successfully!', 'success') except Exception as e: flash(f'Update failed: {str(e)}', 'error') return redirect(url_for('settings')) @app.route("/settings/change-password", methods=['POST']) def change_password(): if not session.get('user_logged_in'): return redirect(url_for('login')) current_password = request.form['current_password'] new_password = request.form['new_password'] confirm_new_password = request.form['confirm_new_password'] if new_password != confirm_new_password: flash('New passwords do not match!', 'error') return redirect(url_for('settings')) db = database() try: user = db.queryDB("SELECT \"Password\" FROM Accounts WHERE \"Client Email\" = ?", [session['user_email']]) if user and check_password_hash(user[0][0], current_password): hashed_new_password = generate_password_hash(new_password) db.updateDB( "UPDATE Accounts SET \"Password\" = ? WHERE \"Client Email\" = ?", [hashed_new_password, session['user_email']] ) flash('Password changed successfully!', 'success') else: flash('Current password is incorrect!', 'error') except Exception as e: flash(f'Password change failed: {str(e)}', 'error') return redirect(url_for('settings')) @app.route("/settings/delete-account", methods=['POST']) def delete_account(): if not session.get('user_logged_in'): return redirect(url_for('login')) password = request.form['delete_password'] db = database() try: user = db.queryDB("SELECT \"Password\" FROM Accounts WHERE \"Client Email\" = ?", [session['user_email']]) if user and check_password_hash(user[0][0], password): db.updateDB("DELETE FROM Accounts WHERE \"Client Email\" = ?", [session['user_email']]) session.clear() flash('Your account has been deleted successfully!', 'success') return redirect(url_for('home')) else: flash('Password is incorrect!', 'error') except Exception as e: flash(f'Account deletion failed: {str(e)}', 'error') return redirect(url_for('settings')) @app.route("/contact", methods=['GET', 'POST']) def contact(): if request.method == 'POST': name = request.form['name'] email = request.form['email'] phone = request.form.get('phone', '') subject = request.form['subject'] message = request.form['message'] flash(f'Thank you {name}! Your message has been received. We\'ll get back to you soon!', 'success') return redirect(url_for('contact')) return render_template("contact.html") @app.route("/accessibility") def accessibility(): return render_template("accessability.html") @app.route("/terms-and-conditions") def terms_and_conditions(): return render_template("terms-and-conditions.html") @app.route("/privacy") def privacy(): return render_template("privacy.html") @app.route("/cookies") def cookies(): return render_template("Cookie Policy.html")Could anyone help out at all?
I tried a third machine (running linux mint), and that worked fine as well, I can't tell if it's an issue with macos, or just my mac in general, or if it's the code? Thanks in advance
