|
|
| """
|
| Flask Login System with SQLite
|
| Features:
|
| - Signup (create new account)
|
| - Login (check user credentials)
|
| - Session (to remember login state)
|
| - Cookies (to store last visit info)
|
| - "Remember Me" option (stay logged in even after closing browser)
|
| """
|
|
|
| from flask import Flask, render_template, request, redirect, url_for, session, make_response
|
| import sqlite3
|
| from datetime import timedelta
|
|
|
|
|
| app = Flask(__name__)
|
|
|
|
|
| app.secret_key = "supersecretkey"
|
|
|
|
|
| app.permanent_session_lifetime = timedelta(days=7)
|
|
|
|
|
|
|
| def get_db_connection():
|
|
|
| conn = sqlite3.connect("users.db")
|
| conn.row_factory = sqlite3.Row
|
| return conn
|
|
|
|
|
|
|
| def init_db():
|
| conn = get_db_connection()
|
| conn.execute("""
|
| CREATE TABLE IF NOT EXISTS users (
|
| id INTEGER PRIMARY KEY AUTOINCREMENT, -- Auto-increment ID
|
| username TEXT UNIQUE NOT NULL, -- Unique username
|
| password TEXT NOT NULL -- Password (plain text for demo, should use hashing!)
|
| )
|
| """)
|
| conn.commit()
|
| conn.close()
|
|
|
|
|
| init_db()
|
|
|
|
|
|
|
| @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"))
|
|
|
|
|
|
|
| @app.route("/signup", methods=["GET", "POST"])
|
| def signup():
|
| if request.method == "POST":
|
| username = request.form["username"]
|
| password = request.form["password"]
|
|
|
| conn = get_db_connection()
|
| try:
|
|
|
| conn.execute("INSERT INTO users (username, password) VALUES (?, ?)", (username, password))
|
| conn.commit()
|
| conn.close()
|
|
|
|
|
| return redirect(url_for("login"))
|
|
|
| except sqlite3.IntegrityError:
|
|
|
| return "Username already exists! Try another."
|
|
|
|
|
| return render_template("signup.html")
|
|
|
|
|
|
|
| @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")
|
|
|
|
|
| conn = get_db_connection()
|
| user = conn.execute("SELECT * FROM users WHERE username=? AND password=?",
|
| (username, password)).fetchone()
|
| conn.close()
|
|
|
| if user:
|
|
|
| if remember == "on":
|
|
|
| session.permanent = True
|
| else:
|
|
|
| session.permanent = 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")
|
|
|
|
|
|
|
| @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
|
|
|
|
|
|
|
| if __name__ == "__main__":
|
| app.run(debug=True, host="0.0.0.0", port=5000) |