2016-07-10 4 views
0

Мы сохранили аутентификацию пользователя (модель пользователя) с помощьюКак получить текущий объект модели в термосе

@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) 

Мы также рассмотрели применение контекста, bluprints, но нет ни одного примера кода с MongoAlchemy с авторизаций пользователя.

+0

Возможного дубликат [Как использовать g.user глобального I n flask] (http://stackoverflow.com/questions/13617231/how-to-use-g-user-global-in-flask) – Suever

+0

Кажется, вы используете 'flask-login'. Вы действительно назовете 'login_user' в своем браузере? Без этого вы не сможете использовать прокси-сервер 'current_user'. – Wombatz

+0

Нет, я не использовал расширение для флажков. Я реализовал с использованием основных сессий store/pop – mathema

ответ

0

Чтобы получить доступ к переменным в том же контексте запроса, в другой функции или класса, используйте г объект:

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

Надеется, что это помогает ..

Смежные вопросы