如何在Flask中获取当前模型对象

时间:2016-07-10 13:16:34

标签: python mongodb flask mongoalchemy

我们使用

存储了经过身份验证的用户(用户的型号)
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没有使用用户身份验证的代码示例。

1 个答案:

答案 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')

希望这会有所帮助..