我们使用
存储了经过身份验证的用户(用户的型号)public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
Main.main();
Timer timer = new Timer(new TimerCallback(refreshSession));
timer.Change(0, 5 * 60 * 1000); // 5 min
}
static void refreshSession(object state)
{
Unirest.get("http://mydomain/");
}
}
我们有一个current_user对象,它引用经过身份验证的用户的属性,如current_user.name,current_user.surname。
以下是我们的数据模型:
@app.route('/login', methods=['GET', 'POST'])
def login():
...
try:
current_user = User.query.filter(School_Login.mail == form_mail).first()
if user.mail == form_mail and user.password == form_pass:
...
这是问题的开始: 我们创建了一个用户仪表板,显示用户的姓名,姓氏等。我们想要访问我们在登录功能中创建的对象,该对象的名称是current_user但我们无法从user_dashboard函数访问current_user。我们也知道我们无法从功能中访问局部变量但我们错过了哪一点?完成这个问题的正确方法是什么?
class User(db.Document):
mail = db.StringField()
pass = db.StringField()
name = db.StringField()
...
我们还查看了应用程序上下文,蓝图,但MongoAlchemy没有使用用户身份验证的代码示例。
答案 0 :(得分:0)
要在同一请求上下文中访问不同函数或类中的变量,请使用 g 对象:
from flask import g
g.current_user = ..
....
current_user = g.current_user
要在不同请求之间执行相同操作,请使用会话 dict:
from flask import session
session['current_user'] = ...
# Then, whenever you need it:
current_user = session.get('current_user', None)
if current_user is None:
# maybe redirect to /login
# To remove the user:
session.pop('current_user')
希望这会有所帮助..