iris1709 / app.py
Rahul23232's picture
Upload 2 files
8b2ca4b verified
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)