from flask import Flask, render_template, request, redirect from datetime import date import sqlite3 import hashlib app = Flask(__name__) DB = "questions.db" def get_db(): return sqlite3.connect(DB) @app.route("/") def home(): conn = get_db() cur = conn.cursor() cur.execute(""" SELECT * FROM questions ORDER BY id DESC LIMIT 1 """) question = cur.fetchone() conn.close() return render_template( "index.html", question=question ) @app.route("/vote", methods=["POST"]) def vote(): qid = request.form["qid"] vote = request.form["vote"] ip = request.remote_addr voter_hash = hashlib.sha256( ip.encode() ).hexdigest() conn = get_db() cur = conn.cursor() cur.execute(""" SELECT * FROM votes WHERE voter_hash = ? AND question_id = ? """, (voter_hash, qid)) existing = cur.fetchone() if not existing: cur.execute(""" INSERT INTO votes (question_id, vote, voter_hash) VALUES (?, ?, ?) """, (qid, vote, voter_hash)) conn.commit() conn.close() return redirect("/results") @app.route("/results") def results(): conn = get_db() cur = conn.cursor() cur.execute(""" SELECT * FROM questions ORDER BY id DESC LIMIT 1 """) question = cur.fetchone() qid = question[0] cur.execute(""" SELECT COUNT(*) FROM votes WHERE question_id = ? AND vote = 'A' """, (qid,)) votes_a = cur.fetchone()[0] cur.execute(""" SELECT COUNT(*) FROM votes WHERE question_id = ? AND vote = 'B' """, (qid,)) votes_b = cur.fetchone()[0] conn.close() total = votes_a + votes_b if total == 0: percent_a = 0 percent_b = 0 else: percent_a = round(votes_a / total * 100) percent_b = round(votes_b / total * 100) return render_template( "results.html", question=question, votes_a=votes_a, votes_b=votes_b, percent_a=percent_a, percent_b=percent_b, total=total ) if __name__ == "__main__": app.run(debug=True)