我想检测会话[' logged_in']是否存在,这意味着我的用户已经登录。
例如:
if (session['logged_in'] != None):
if session['logged_in'] == True:
return redirect(url_for('hello'))
但是,如果密钥' logged_in'不存在它因此产生错误。由于会话对象就像字典,我以为我可以使用had_key()方法,但这似乎也不起作用。是否有一种简单的方法可以检测会话是否包含数据而不会产生错误?
答案 0 :(得分:8)
通常,访问会话项就像使用字典一样简单。
您可以使用has_key()
(没有had_key()
方法),但最好使用in
或get()
。访问会话项的示例烧瓶应用程序:
from flask import Flask, session, request, redirect, url_for
app = Flask(__name__)
@app.route('/')
def index():
if session.get('logged_in') == True:
return 'You are logged in'
return 'You are not logged in'
@app.route('/login')
def login():
session['logged_in'] = True
return redirect(url_for('index'))
@app.route('/logout')
def logout():
session.pop('logged_in', None)
return redirect(url_for('index'))
if __name__ == '__main__':
app.secret_key = 'ssssshhhhh'
app.run()
答案 1 :(得分:7)
您可以使用类似的内容来检查会话字典中是否存在密钥:
if session.get('logged_in'):
if session['logged_in'] == True:
return redirect(url_for('hello'))
答案 2 :(得分:3)
作为@rnevius mentioned,如果您尝试解决的基础问题是测试当前用户是否已登录,那么最好使用某些built-in Flask functionality。
如果您只是试图找出会话对象中是否存在某个键(logged_in
),您可以将会话对象视为字典,只需使用以下语法:
if session.get('logged_in') is not None:
# Here we know that a logged_in key is present in the session object.
# Now we can safely check it's value
if session['logged_in'] == True:
return redirect(url_for('hello'))
答案 3 :(得分:3)
if session.get('logged_in') is not None:
# do something for logged in user
return render_template('success.html')
else:
# do something for non-logged in user
return render_template('index.html')
尝试一下,它应该有效。
对于迟来的回答感到抱歉,但我自己也在苦苦挣扎,这是基本的公式。
在我的场景中,我在mysql数据库中有一个users
表,当用户登录或创建帐户时,会创建一个session
变量并设置为该用户的{{1} }}。
如果此用户现在导航到root id
,则会检测到('/')
变量并提供session
。
如果找不到success.html
的值,则会提供session['logged_in']
,但他们可以在哪里创建帐户或登录。