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'))
是否有一种无需指定用户名即可生成会话的方法?
您必须以不同的方式处理问题!
会话是要使用的正确构造。
但是,除了存储用户名,您还可以存储类似JSON的对象,该对象包含编程语言和一个表示用户是否已投票赞成的整数。
例如,您可以在会话中存储与此类似的对象:
{
'java' : 0,
'python3' : 0
'pascal' : 0
}
在用户投票选择特定语言后,只需将该特定语言的值更新为1。
现在您只需要确保随机询问的语言为0。
这适用于每个会话,而无需用户登录。