Flaskエラーを解決します 'TypeError:' bool 'オブジェクトは呼び出し可能ではありません'



Solve Flask Errortypeerror



ラベル: Python フラスコ


【参考リンク】
python-flaskチュートリアルの学習プロセスで問題が発生しましたTypeError: 'bool'オブジェクトを呼び出せません



フォローする Flask Largeチュートリアルプロジェクトへようこそ! Flaskを学ぶためのチュートリアルが到着しました ユーザーモデルのリファクタリング スクリプトを実行すると、次のエラーが発生します。

TypeError: 'bool'オブジェクトは呼び出せません



これはユーザーモデルです:

class User(db.Model): id = db.Column(db.Integer, primary_key=True) nickname = db.Column(db.String(64), index=True, unique=True) email = db.Column(db.String(120), index=True, unique=True) posts = db.relationship('Post', backref='author', lazy='dynamic') @property def is_authenticated(self): return True @property def is_active(self): return True @property def is_anonymous(self): return False def get_id(self): try: return unicode(self.id) # python 2 except NameError: return str(self.id) # python 3 def __repr__(self): return '' % (self.nickname)

これは、呼び出されたときのコードです。

from flask import render_template, flash, redirect, session, url_for, request, g from flask.ext.login import login_user, logout_user, current_user, login_required from app import app, db, lm, oid from .forms import LoginForm from .models import User @app.route('/login', methods=['GET', 'POST']) @oid.loginhandler def login(): If g.user is not None and g.user.is_authenticated(): # this sentence gives an error 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'])

解決:



参考文献の参考文献によると:
is_authenticatedは属性であり、メソッドではなく、括弧は削除されます。この本のこのセクションには2つの誤植があります。gitのソースを参照してください。

したがって、間違った場所に置きます。
if g.user is not None and g.user.is_authenticated():
に変更されます
if g.user is not None and g.user.is_authenticated:
再度実行すると、エラーが消えます。