【问题标题】:How to get current model object in Flask如何在 Flask 中获取当前模型对象
【发布时间】:2016-07-10 13:16:34
【问题描述】:

我们使用

存储了经过身份验证的用户(用户模型)
@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 对象,它引用经过身份验证的用户的属性,例如 current_user.name、current_user.surname。

这是我们的数据模型:

class User(db.Document):
    mail = db.StringField()
    pass = db.StringField()
    name = db.StringField()
    ...

这是问题的开始: 我们创建了一个显示用户名、姓氏等的用户仪表板。我们想要访问我们在登录函数中创建的名称为 current_user 但我们无法从 user_dashboard 函数访问 current_user 的对象。我们也知道我们不能从函数中访问局部变量,但是我们错过了哪一点?解决这个问题的正确方法是什么?

@app.route('/user-dashboard')
@login_required
def user_dashboard():
    name = current_user.name
    surname = current_user.surname
    return render_template('user-dashboard.html', name=name, surname=surname)

我们还查看了应用程序上下文、蓝图,但没有带有用户身份验证的 MongoAlchemy 的代码示例。

【问题讨论】:

  • 看来您使用的是flask-login。您是否真的在登录视图中调用了login_user?否则,您将无法使用 current_user 代理。
  • 不,我没有使用烧瓶登录扩展。我使用基本的商店/流行会话实现

标签: python mongodb flask mongoalchemy


【解决方案1】:

要访问同一请求上下文中、不同函数或类中的变量,请使用 g 对象:

from flask import g
g.current_user = ..
....
current_user = g.current_user

要在不同请求之间执行相同操作,请使用 session 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')

希望这会有所帮助..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多