如何检测Flask会话中是否存在变量?

时间:2015-03-08 10:54:48

标签: flask

我想检测会话[' logged_in']是否存在,这意味着我的用户已经登录。

例如:

if (session['logged_in'] != None):
    if session['logged_in'] == True:
        return redirect(url_for('hello'))

但是,如果密钥' logged_in'不存在它因此产生错误。由于会话对象就像字典,我以为我可以使用had_key()方法,但这似乎也不起作用。是否有一种简单的方法可以检测会话是否包含数据而不会产生错误?

4 个答案:

答案 0 :(得分:8)

通常,访问会话项就像使用字典一样简单。

您可以使用has_key()(没有had_key()方法),但最好使用inget()。访问会话项的示例烧瓶应用程序:

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'],但他们可以在哪里创建帐户或登录。