Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检测Flask会话中是否存在变量?_Flask - Fatal编程技术网

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

如何检测Flask会话中是否存在变量?,flask,Flask,我想检测会话['logged_in']键是否存在,这意味着我的用户已经登录 例如: if (session['logged_in'] != None): if session['logged_in'] == True: return redirect(url_for('hello')) 但是,如果密钥“logged_in”不存在,则会生成错误。由于会话对象类似于字典,所以我认为可以使用had_key()方法,但这似乎也不起作用。有没有一种简单的方法可以在不产生错误的情况

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

例如:

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

但是,如果密钥“logged_in”不存在,则会生成错误。由于会话对象类似于字典,所以我认为可以使用had_key()方法,但这似乎也不起作用。有没有一种简单的方法可以在不产生错误的情况下检测会话是否包含数据?

您可以使用类似的方法来检查会话dict中是否存在密钥:

if session.get('logged_in'):
    if session['logged_in']:
        return redirect(url_for('hello'))
同样,如果您试图解决的根本问题是测试当前用户是否已登录,那么您最好使用一些

如果您只是想确定会话对象中是否存在某个键(
logged\u 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'))

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

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

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()
试一试,它应该有用

对于迟来的回答,我感到抱歉,但我自己也在为同样的事情而挣扎,这是基本公式

在我的场景中,mysql数据库中有一个
users
表,当用户登录或创建帐户时,将创建一个
session
变量,并将其设置为该用户的
id

如果该用户现在导航到root
(“/”)
,则会检测到
会话
变量,并提供
success.html


如果未找到
session['logged_in']
的值,则会提供
index.html
,在那里他们可以创建帐户或登录。

有更好的方法来检查用户是否登录…这是您的实际用例吗?因此get()方法不会生成错误,非常好,非常感谢:)@brad您是正确的。但是,这并不是说它不会生成错误-如果密钥不存在,
get
将返回默认值:
None
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')