Как получить текущий объект модели во Flask

Мы сохранили аутентифицированного пользователя (модель пользователя), используя

@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, но мы не можем получить доступ к current_user из функции user_dashboard. Мы также знаем, что мы не можем получить доступ к локальным переменным из функции, но какую точку мы упустили? Как правильно решить эту проблему?

@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 с аутентификациями пользователей.

1 ответ

Чтобы получить доступ к переменным в том же контексте запроса, в другой функции или классе, используйте объект 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')

Надеюсь это поможет..

Другие вопросы по тегам