| |
|
| | """
|
| | 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) |