未登录的烧瓶会话(匿名会话)

时间:2020-04-13 07:18:12

标签: python flask

Tl; dr::如何在无需验证用户身份(例如登录)的情况下生成Flask会话?

漫长的故事

我正在开发一个简单的Web应用程序,用户可以在其中对编程语言是否很热门进行投票。到目前为止,我有一个索引HTML文件,该文件可以向用户随机显示一种编程语言并获得他/她的投票,但这意味着(经常)用户两次或多次被提示使用相同的语言。

例如:python3-> C#-> C-> Pascal-> python3

我想记住用户“一段时间”(会话)。如果他/她关闭浏览器然后再次投票,那很好。我只是想避免向用户问同样的问题两次。

我发现Flask会话的所有教程和示例都实现了某种login形式,例如Flask's quickstart guide中的以下内容:

@app.route('/')
def index():
    if 'username' in session:
        return 'Logged in as %s' % escape(session['username'])
    return 'You are not logged in'

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        session['username'] = request.form['username']
        return redirect(url_for('index'))
    return '''
        <form method="post">
            <p><input type=text name=username>
            <p><input type=submit value=Login>
        </form>
    '''

@app.route('/logout')
def logout():
    # remove the username from the session if it's there
    session.pop('username', None)
    return redirect(url_for('index'))

是否可以在不指定用户名的情况下生成会话?

1 个答案:

答案 0 :(得分:0)

您必须以不同的方式处理问题!

会话是要使用的正确构造。

但是,代替存储用户名,您可以存储类似JSON的对象,该对象包含编程语言和一个整数,代表用户是否已投票赞成。

例如,您可以在会话中存储与此类似的对象:

{
    'java' : 0,
    'python3' : 0
    'pascal' : 0
}

用户投票选出特定语言后,只需将该特定语言的值更新为1。

现在,您只需要确保随机询问的语言为0。

这适用于每个会话,而无需用户登录。