58 lines
1.7 KiB
Python
Executable File
58 lines
1.7 KiB
Python
Executable File
from flask import Flask, render_template, request
|
|
import math
|
|
from profiles import profiles
|
|
|
|
app = Flask(__name__)
|
|
|
|
# --- Matching logic (server-side copy, used for initial render only) ---
|
|
def euclidean_distance(a, b):
|
|
return math.sqrt(sum((x - y) ** 2 for x, y in zip(a, b)))
|
|
|
|
@app.route("/")
|
|
def index():
|
|
return render_template("about.html")
|
|
|
|
@app.route("/inactive")
|
|
def inactive():
|
|
# Default user values (all 20). Client-side UI will live-update from there.
|
|
user_values = [20, 20, 20, 20, 20, 20]
|
|
sorted_matches = sorted(
|
|
profiles.items(), key=lambda p: euclidean_distance(user_values, p[1]['values'])
|
|
)
|
|
top_matches = sorted_matches[:3]
|
|
|
|
return render_template(
|
|
"inactive.html",
|
|
user=user_values,
|
|
top_matches=top_matches,
|
|
profiles=profiles,
|
|
)
|
|
|
|
@app.route("/profiles")
|
|
def profiles_page():
|
|
return render_template("profiles.html", profiles=profiles)
|
|
|
|
@app.route("/quiz", methods=["GET", "POST"])
|
|
def quiz():
|
|
if request.method == "POST":
|
|
user_values = [
|
|
int(request.form.get(f"point{i}", 20)) for i in range(1, 7)
|
|
]
|
|
sorted_matches = sorted(
|
|
profiles.items(),
|
|
key=lambda p: euclidean_distance(user_values, p[1]['values'])
|
|
)
|
|
top_matches = sorted_matches[:3]
|
|
return render_template("result.html",
|
|
user=user_values,
|
|
top_matches=top_matches,
|
|
profiles=profiles)
|
|
return render_template("quiz.html", profiles=profiles)
|
|
|
|
@app.route("/result")
|
|
def result():
|
|
return render_template("result.html", profiles=profiles)
|
|
|
|
if __name__ == "__main__":
|
|
app.run(host='localhost', port=1337, debug=False)
|