Spaces:
Sleeping
Sleeping
| from flask import Flask, render_template, request, redirect, url_for, session, flash | |
| from werkzeug.security import generate_password_hash, check_password_hash | |
| import os | |
| # ML imports | |
| from sklearn.datasets import load_iris | |
| from sklearn.linear_model import LogisticRegression | |
| import numpy as np | |
| app = Flask(__name__) | |
| # Stable secret key (important for sessions in Hugging Face Spaces) | |
| app.secret_key = os.environ.get("SECRET_KEY", "supersecretkey123") | |
| # ---------------------------- | |
| # Train Iris Model (once only) | |
| # ---------------------------- | |
| iris = load_iris(as_frame=True) | |
| X = iris.data.values | |
| y = iris.target | |
| species = iris.target_names | |
| iris_model = LogisticRegression(max_iter=300) | |
| iris_model.fit(X, y) | |
| # ---------------------------- | |
| # Simple in-memory "database" | |
| # ---------------------------- | |
| users = {} | |
| def home(): | |
| if "user" in session: | |
| return redirect(url_for("dashboard")) | |
| return redirect(url_for("login")) | |
| def signup(): | |
| if request.method == "POST": | |
| username = request.form["username"] | |
| password = request.form["password"] | |
| confirm_password = request.form.get("confirmPassword") | |
| if password != confirm_password: | |
| flash("Passwords do not match.", "danger") | |
| return redirect(url_for("signup")) | |
| if username in users: | |
| flash("Username already exists!", "danger") | |
| return redirect(url_for("signup")) | |
| # Save user and auto-login | |
| users[username] = generate_password_hash(password) | |
| session["user"] = username | |
| flash("Signup successful! You are now logged in.", "success") | |
| return redirect(url_for("dashboard")) | |
| return render_template("signup.html") | |
| def login(): | |
| if request.method == "POST": | |
| username = request.form["username"] | |
| password = request.form["password"] | |
| if username in users and check_password_hash(users[username], password): | |
| session["user"] = username | |
| # return render_template( | |
| # "dashboard.html", | |
| # username=session["user"], | |
| # ) | |
| flash("Login successful!", "success") | |
| return redirect(url_for("dashboard")) | |
| else: | |
| flash("Invalid username or password", "danger") | |
| return render_template("login.html") | |
| def dashboard(): | |
| if "user" not in session: | |
| return redirect(url_for("login")) | |
| return render_template("dashboard.html", username=session["user"]) | |
| def predict(): | |
| if "user" not in session: | |
| return redirect(url_for("login")) | |
| try: | |
| sl = float(request.form["sepal_length"]) | |
| sw = float(request.form["sepal_width"]) | |
| pl = float(request.form["petal_length"]) | |
| pw = float(request.form["petal_width"]) | |
| except Exception: | |
| flash("Invalid input values!", "danger") | |
| return redirect(url_for("dashboard")) | |
| res_idx = iris_model.predict([[sl, sw, pl, pw]])[0] | |
| res = species[res_idx] | |
| # flash(f"The predicted flower species is: {res}", "success") | |
| # return redirect(url_for("dashboard")) | |
| # Render dashboard with prediction | |
| return render_template( | |
| "dashboard.html", | |
| username=session["user"], | |
| prediction=res, | |
| scroll_to="predict" | |
| ) | |
| def portfolio(): | |
| if "user" not in session: | |
| return redirect(url_for("login")) | |
| return render_template("portfolio.html") | |
| def logout(): | |
| session.pop("user", None) | |
| flash("Logged out successfully.", "info") | |
| return redirect(url_for("login")) | |
| if __name__ == "__main__": | |
| app.run(host="0.0.0.0", port=7860, debug=True) | |