|
|
| from flask import Flask, request, render_template, redirect, url_for, session, flash |
| import seaborn as sns |
| from sklearn.linear_model import LogisticRegression |
| import sqlite3, os |
|
|
| app = Flask(__name__) |
| app.secret_key = "supersecretkey" |
|
|
| |
| def init_db(): |
| if not os.path.exists("users.db"): |
| conn = sqlite3.connect("users.db") |
| c = conn.cursor() |
| c.execute(""" |
| CREATE TABLE users ( |
| id INTEGER PRIMARY KEY AUTOINCREMENT, |
| username TEXT UNIQUE NOT NULL, |
| password TEXT NOT NULL |
| ) |
| """) |
| conn.commit() |
| conn.close() |
|
|
| init_db() |
|
|
| |
| df = sns.load_dataset("iris") |
| X = df.iloc[:, :4].values |
| y = df.iloc[:, 4].values |
|
|
| model = LogisticRegression(max_iter=200, multi_class="auto") |
| model.fit(X, y) |
|
|
| |
|
|
| @app.route("/") |
| def home(): |
| if "user" in session: |
| return redirect(url_for("predict")) |
| 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"] |
|
|
| try: |
| conn = sqlite3.connect("users.db") |
| c = conn.cursor() |
| c.execute("INSERT INTO users (username, password) VALUES (?, ?)", (username, password)) |
| conn.commit() |
| conn.close() |
| flash("Signup successful! Please login.", "success") |
| return redirect(url_for("login")) |
| except sqlite3.IntegrityError: |
| flash("Username already taken!", "danger") |
|
|
| 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"] |
|
|
| conn = sqlite3.connect("users.db") |
| c = conn.cursor() |
| c.execute("SELECT * FROM users WHERE username=? AND password=?", (username, password)) |
| user = c.fetchone() |
| conn.close() |
|
|
| if user: |
| session["user"] = username |
| flash("Login successful!", "success") |
| return redirect(url_for("predict")) |
| else: |
| flash("Invalid credentials!", "danger") |
|
|
| return render_template("login.html") |
|
|
| @app.route("/predict", methods=["GET", "POST"]) |
| def predict(): |
| if "user" not in session: |
| return redirect(url_for("login")) |
|
|
| prediction_text = "" |
| if request.method == "POST": |
| try: |
| sepal_length = float(request.form["sepal_length"]) |
| sepal_width = float(request.form["sepal_width"]) |
| petal_length = float(request.form["petal_length"]) |
| petal_width = float(request.form["petal_width"]) |
|
|
| prediction = model.predict( |
| [[sepal_length, sepal_width, petal_length, petal_width]] |
| )[0] |
|
|
| prediction_text = f"Predicted Flower: {prediction}" |
| except Exception as e: |
| prediction_text = f"Error: {e}" |
|
|
| return render_template("index.html", prediction_text=prediction_text) |
|
|
| @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) |
|
|
| |
| |
| |
|
|
| |
| |
| |
| |
| |
|
|
| |
| |
| |
|
|
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
|
|
| |
| |
|
|
| |
|
|
| |
| |
|
|
|
|