未登录的Flask会话(匿名会话)

问题描述 投票:0回答:1

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'))

是否有一种无需指定用户名即可生成会话的方法?

python flask
1个回答
0
投票

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

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

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

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.