PCv5/app/routes/polls/vote.py

35 lines
840 B
Python

from app import app, db
from flask import abort, flash, redirect, request, url_for
from flask_login import current_user
from app.models.poll import Poll
@app.route("/poll/<int:poll_id>/vote", methods=['POST'])
def poll_vote(poll_id):
poll = Poll.query.first_or_404(poll_id)
if not current_user.is_authenticated:
abort(401)
if not poll.can_vote(current_user):
abort(403)
if poll.has_voted(current_user):
abort(403)
if not poll.started:
abort(403)
if poll.ended:
abort(403)
answer = poll.vote(current_user, request)
if answer is None:
abort(400)
db.session.add(answer)
db.session.commit()
flash('Le vote a été pris en compte', 'info')
if request.referrer:
return redirect(request.referrer)
return redirect(url_for('index'))