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