Spaces:
Running
Running
| from flask import Flask, request, redirect, url_for, make_response, render_template | |
| from flask_sqlalchemy import SQLAlchemy | |
| from werkzeug.security import generate_password_hash, check_password_hash | |
| app = Flask(__name__) | |
| # Configure the SQLite database | |
| app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db' | |
| app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False | |
| db = SQLAlchemy(app) | |
| # Define the User model | |
| class User(db.Model): | |
| id = db.Column(db.Integer, primary_key=True) | |
| username = db.Column(db.String(80), unique=True, nullable=False) | |
| password = db.Column(db.String(200), nullable=False) | |
| # Create the database and tables | |
| def create_tables(): | |
| db.create_all() | |
| # Landing page route | |
| def landing_page(): | |
| return render_template('index.html') # Ensure index.html exists in the templates folder | |
| # User registration route | |
| def register(): | |
| username = request.form.get('username') | |
| password = request.form.get('password') | |
| # Check if the username already exists | |
| if User.query.filter_by(username=username).first(): | |
| return "Username already exists. Please choose another.", 400 | |
| # Hash the password and save the user to the database | |
| hashed_password = generate_password_hash(password) | |
| new_user = User(username=username, password=hashed_password) | |
| db.session.add(new_user) | |
| db.session.commit() | |
| return "User registered successfully!", 201 | |
| # User login route | |
| def login(): | |
| username = request.form.get('username') | |
| password = request.form.get('password') | |
| # Look up the user in the database | |
| user = User.query.filter_by(username=username).first() | |
| if not user: | |
| return "Invalid username." | |
| # Verify the password | |
| if check_password_hash(user.password, password): | |
| response = make_response(redirect(url_for('landing_page'))) | |
| response.set_cookie('logged_in', 'true', max_age=3600) # Set session cookie for 1 hour | |
| response.set_cookie('username', username, max_age=3600) | |
| return response | |
| return "Invalid password!" | |
| # User logout route | |
| def logout(): | |
| response = make_response(redirect(url_for('landing_page'))) | |
| response.delete_cookie('logged_in') | |
| response.delete_cookie('username') | |
| return response | |
| if __name__ == '__main__': | |
| app.run(debug=True) | |