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 переменная (file app/views.py):

@app.before_request
def before_request():
    g.user = current_user

это все, что нужно. The current_user global устанавливается с помощью Flask-Login, поэтому мы просто помещаем копию в g объект, чтобы иметь лучший доступ к нему. При этом, все запросы будут иметь доступ к данному пользователю, даже внутри шаблонов.

ваш код, по-видимому, отсутствует это before_request обработчик.