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

Bra*_*sen 10 flask

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

例如:

if (session['logged_in'] != None):
    if session['logged_in'] == True:
        return redirect(url_for('hello'))
Run Code Online (Sandbox Code Playgroud)

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

mha*_*wke 9

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

你可以使用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()
Run Code Online (Sandbox Code Playgroud)


Mat*_*aly 7

你可以使用这样的东西来检查会话字典中是否存在密钥:

if session.get('logged_in'):
    if session['logged_in'] == True:
        return redirect(url_for('hello'))
Run Code Online (Sandbox Code Playgroud)


twk*_*nab 5

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')
Run Code Online (Sandbox Code Playgroud)

试一试,它应该有效。

对不起,迟到的答案,但我自己也在努力解决同样的问题,这是基本公式。

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

如果此用户现在导航到 root ('/')session则会检测到该变量并提供该变量success.html

如果找不到值session['logged_in']index.html则提供服务,他们可以在其中创建帐户或登录。


Ami*_*yan 0

您可以使用in关键字作为keys方法:

# Check if key exists
if 'logged_in' in session.keys():
    if session['logged_in'] == True:
        return redirect(url_for('hello'))
Run Code Online (Sandbox Code Playgroud)