我想检测会话['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()方法,但这似乎也不起作用.有没有一种简单的方法可以检测会话是否包含数据而不会产生错误?
通常,访问会话项与使用字典一样简单.
你可以使用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()
Run Code Online (Sandbox Code Playgroud)
你可以使用这样的东西来检查会话字典中是否存在密钥:
if session.get('logged_in'):
if session['logged_in'] == True:
return redirect(url_for('hello'))
Run Code Online (Sandbox Code Playgroud)
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则提供服务,他们可以在其中创建帐户或登录。
您可以使用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)
| 归档时间: |
|
| 查看次数: |
20619 次 |
| 最近记录: |