cannamatch/app.py
2025-10-22 11:51:33 +02:00

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)