使用cookie检查匿名用户是否投票

时间:2015-08-04 02:58:49

标签: javascript cookies flask

我正在开发一个使用Flask作为后端服务器的webapp。我存储在SQLAlchemy数据库中的帖子,我希望用户能够在不必登录的情况下对它们进行upvote / downvote。我编写了一个用于upvoting / downvoting的JavaScript函数,它增加了当前的投票数,然后更新了使用Ajax的数据库中的计数。我想确保同一个用户不会在同一个帖子上投票两次;它不必是健壮的。我读到cookie可用于此目的,或cookie和IP的组合。我很难理解如何开始:我是在JS或Flask中为用户分配cookie吗?如何检查用户是否已经投票?如果有人可以给我一个简单的例子或者指导我获得一个好的资源,我会表示同意。非常感谢。

这是我用于upvoting的Javascript部分:

$(document).ready(function() {
        $('#{{ upbtnID }}').click(
            function() {
                var postID = "{{ answer.id }}";
                var data = {
                    'id': "{{ answer.id }}"
                };
                var score = document.getElementById('{{ scoreID }}');
                var scoreText = score.textContent;
                var scoreToInt = parseInt(scoreText, 10);
                var newScore = ++scoreToInt;
                var scoreToStr = newScore.toString();

                $(this).css('border-bottom-color', '#26EDEB');
                score.textContent = scoreToStr;

                $.ajax({
                    url: "/upvote",
                    data: JSON.stringify(data, null, '\t'),
                    contentType: 'application/json;charset=UTF-8',
                    type: 'POST',
                    success: function(response) {;
                    },
                    error: function(error) {
                        alert("Awww");
                    }
                });
            });

Flask中的相应功能:

# upvote a post
@app.route('/upvote',  methods=["GET", "POST"])
def upvote():
    if request.method =="POST":
        thePostID = int(request.json["id"])
        thePost = Answer.query.get(thePostID)
        thePost.score += 1
        db.session.commit()
        data = thePost.score
        return ('', 204) 

1 个答案:

答案 0 :(得分:0)

从Flask片段引用:

@app.route('/set_cookie')
def cookie_insertion():
     redirect_to_index = redirect('/index')
     response = current_app.make_response(redirect_to_index )  
     response.set_cookie('cookie_name',value='values')
     return response

链接:http://flask.pocoo.org/snippets/30/