Spaces:
No application file
No application file
File size: 4,161 Bytes
8b2ca4b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
from flask import Flask, render_template, request, redirect, url_for, session, make_response
import sqlite3
from datetime import timedelta
import seaborn as sns
from sklearn.linear_model import LogisticRegression
import numpy as np
# Flask app setup
app = Flask(__name__)
app.secret_key = "supersecretkey" # Change this to a secure key in production
app.permanent_session_lifetime = timedelta(days=7)
# 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 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()
# Initialize DB at startup
init_db()
# Home page -> always redirect to login
@app.route("/")
def home():
return redirect(url_for("login"))
# Load dataset and train model once
iris_data = sns.load_dataset("iris")
X = iris_data.iloc[:, 0:4].values
y = iris_data.iloc[:, 4].values
model = LogisticRegression(max_iter=300)
model.fit(X, y)
@app.route('/predict', methods=['POST'])
def predict_flower():
try:
# Get data from form
sl = float(request.form['sl'])
sw = float(request.form['sw'])
pl = float(request.form['pl'])
pw = float(request.form['pw'])
# Predict
prediction = model.predict([[sl, sw, pl, pw]])
result = prediction[0]
return render_template("form.html", result=result)
except Exception as e:
return render_template("form.html", result=f"Error: {str(e)}")
@app.route('/form')
def show_form():
return render_template("form.html")
# Signup page
@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")
# 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")
conn = get_db_connection()
user = conn.execute(
"SELECT * FROM users WHERE username=? AND password=?",
(username, password)
).fetchone()
conn.close()
if user:
session.permanent = (remember == "on")
session["username"] = username
resp = make_response(redirect(url_for("index"))) # Go to index.html after login
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")
# Index page - accessible only if logged in
@app.route("/index")
def index():
username = session.get("username")
if not username:
return redirect(url_for("login"))
last_visit = request.cookies.get("last_visit", "First time visiting!")
return render_template("index.html", username=username, last_visit=last_visit)
# Logout route
@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)
|