AttributeError: объект "AppCtxGlobals" не имеет атрибута "пользователь" в колбе
Я пытаюсь узнать колбу, после Колба Мега Учебник. В часть 5, представление login () редактируется следующим образом:
@app.route('/login', methods = ['GET', 'POST'])
@oid.loginhandler
def login():
if g.user is not None and g.user.is_authenticated():
return redirect(url_for('index'))
form = LoginForm()
if form.validate_on_submit():
session['remember_me'] = form.remember_me.data
return oid.try_login(form.openid.data, ask_for = ['nickname', 'email'])
return render_template('login.html',
title = 'Sign In',
form = form,
providers = app.config['OPENID_PROVIDERS'])
это, однако, дает мне AttributeError которого я вставлю StackTrace ниже. Это дает ошибку на куске, который я вставил точно из источника примеров. Я использую Пиви вместо SQLAlchemy, но поскольку этот фрагмент кода ничего не делает с БД, я бы не знал, почему это будут связаны.
кто-нибудь знает, что я могу делать неправильно здесь?
Traceback (most recent call last):
File "/Users/kramer65/dev/repos/microblog/flask/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "/Users/kramer65/dev/repos/microblog/flask/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/Users/kramer65/dev/repos/microblog/flask/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/Users/kramer65/dev/repos/microblog/flask/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/Users/kramer65/dev/repos/microblog/flask/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/kramer65/dev/repos/microblog/flask/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/kramer65/dev/repos/microblog/flask/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/kramer65/dev/repos/microblog/flask/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/kramer65/dev/repos/microblog/flask/lib/python2.7/site-packages/flask_openid.py", line 446, in decorated
return f(*args, **kwargs)
File "/Users/kramer65/dev/repos/microblog/app/views.py", line 31, in login
if g.user is not None and g.user.is_authenticated():
File "/Users/kramer65/dev/repos/microblog/flask/lib/python2.7/site-packages/werkzeug/local.py", line 338, in __getattr__
return getattr(self._get_current_object(), name)
AttributeError: '_AppCtxGlobals' object has no attribute 'user'
1 ответов
тот же учебник, немного дальше, объясняет, как g.user
установлено:
g.пользователь global
если вы обращали внимание, вы помните, что в функции login view мы проверяем
g.user
чтобы определить, вошел ли пользователь в систему. Для реализации этого мы будем использоватьbefore_request
событие из фляжки. Любые функции, которые украшеныbefore_request
будет выполняться перед функцией просмотра каждый раз, когда запрос получен. Так что это то самое место. чтобы настроить нашg.user
переменная (fileapp/views.py
):@app.before_request def before_request(): g.user = current_user
это все, что нужно. The
current_user
global устанавливается с помощью Flask-Login, поэтому мы просто помещаем копию вg
объект, чтобы иметь лучший доступ к нему. При этом, все запросы будут иметь доступ к данному пользователю, даже внутри шаблонов.
ваш код, по-видимому, отсутствует это before_request
обработчик.