Как получить текущий объект модели во 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')
Надеюсь это поможет..