abc2 / app.py
sakshi116's picture
Update app.py
07f27e9 verified
from flask import Flask, render_template, request, redirect, url_for, session, make_response
import sqlite3
from datetime import timedelta
from werkzeug.security import generate_password_hash, check_password_hash
# Flask App Setup
app = Flask(__name__)
app.secret_key = "supersecretkey" # Secret key (keep it secret in production)
app.permanent_session_lifetime = timedelta(days=7) # For "Remember Me"
# Helper function to connect to SQLite database
def get_db_connection():
conn = sqlite3.connect("users.db")
conn.row_factory = sqlite3.Row
return conn
# Initialize database with a "users" table
def init_db():
conn = get_db_connection()
conn.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
password TEXT NOT NULL
)
""")
conn.commit()
conn.close()
# Call database initialization at startup
init_db()
# Home Page (only logged-in users can see this)
@app.route("/")
def home():
if "username" in session:
username = session["username"]
last_visit = request.cookies.get("last_visit", "First time visiting!")
return render_template("home.html", username=username, last_visit=last_visit)
return redirect(url_for("login"))
# Signup Page
@app.route("/signup", methods=["GET", "POST"])
def signup():
if request.method == "POST":
username = request.form["username"]
password = request.form["password"]
print("Signup attempt:", username, password)
hashed_password = generate_password_hash(password)
conn = get_db_connection()
try:
conn.execute("INSERT INTO users (username, password) VALUES (?, ?)", (username, hashed_password))
conn.commit()
conn.close()
return redirect(url_for("login"))
except sqlite3.IntegrityError:
return "❌ Username already exists! Try another."
return render_template("signup.html")
# Login Page
@app.route("/login", methods=["GET", "POST"])
def login():
if request.method == "POST":
username = request.form["username"]
password = request.form["password"]
remember = request.form.get("remember")
print("Login attempt:", username, password, "Remember:", remember)
conn = get_db_connection()
user = conn.execute("SELECT * FROM users WHERE username=?", (username,)).fetchone()
conn.close()
if user and check_password_hash(user["password"], password):
session.permanent = True if remember == "on" else False
session["username"] = username
resp = make_response(redirect(url_for("home")))
resp.set_cookie("last_visit", "Welcome back, " + username,
max_age=(7*24*60*60 if remember == "on" else None))
return resp
else:
return "❌ Invalid username or password. Try again."
return render_template("login.html")
# Logout Page
@app.route("/logout")
def logout():
session.pop("username", None)
resp = make_response(redirect(url_for("login")))
resp.set_cookie("last_visit", "", expires=0)
return resp
# Run the App
if __name__ == "__main__":
app.run(debug=True, host="0.0.0.0", port=5000)