File size: 3,831 Bytes
7249903
 
e35eb29
7249903
 
1b03ca3
7249903
 
 
 
e35eb29
 
 
7249903
 
 
 
1b03ca3
 
 
 
7249903
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e35eb29
7249903
e35eb29
5fdab59
7586abf
7249903
 
 
 
 
 
 
 
 
 
 
89c9f86
 
 
 
5fdab59
7586abf
 
 
7249903
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1b03ca3
 
96050fb
75ddc81
 
 
 
 
cfaca88
ccb2f7d
9d5267a
7249903
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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 = {}

@app.route("/")
def home():
    if "user" in session:
        return redirect(url_for("dashboard"))
    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"]
        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")

@app.route("/login", methods=["GET", "POST"])
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")

@app.route("/dashboard")
def dashboard():
    if "user" not in session:
        return redirect(url_for("login"))
    return render_template("dashboard.html", username=session["user"])

@app.route("/predict", methods=["POST"])
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"
    )

@app.route("/portfolio")
def portfolio():
    if "user" not in session:
        return redirect(url_for("login"))
    return render_template("portfolio.html")

@app.route("/logout")
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)