1

confirmed次のコードを使用して、モデル内のユーザーの BooleanFieldを返そうとしていますUserTable(したがって、後で一部のルートへのアクセスを拒否できます)。

models.py

class UserTable(UserMixin, Model):
    email = CharField(unique=True)
    password = CharField()
    confirmed = BooleanField()

    class Meta:
        database = db

app.py

@app.route('/isconfirmed/<email>')
def isconfirmed(email):
    return models.UserTable.get(models.UserTable.email == email).confirmed

ただし、これを試すと、次のようになります。TypeError: 'bool' object is not callable

私はアクセスしようemailpasswordしました:

return models.UserTable.get(models.UserTable.email == email).emailなど、問題なく動作します。BooleanField から True または False を返せない理由がわかりませんか???

関連性/助けがあれば、Postgresをデータベースとして使用しています。

どんな助けでも大歓迎です!!!

4

1 に答える 1

2

これが何が起こっているかです。

models.UserTable.get(models.UserTable.email == email).confirmedは正当なクエリであり、ブール値の -Trueまたはを返しますFalse

ここで、ビュー レスポンス タイプの処理ロジックを参照します。

ビュー関数からの戻り値は、自動的に応答オブジェクトに変換されます。戻り値が文字列の場合、文字列を応答本文として持つ応答オブジェクトに変換され、200 OK エラー コードと text/html MIME タイプが返されます。戻り値を応答オブジェクトに変換するために Flask が適用するロジックは次のとおりです。

  • 正しいタイプの応答オブジェクトが返された場合、それはビューから直接返されます。

  • 文字列の場合、そのデータと既定のパラメーターを使用して応答オブジェクトが作成されます。

  • タプルが返された場合、タプル内の項目は追加情報を提供できます。このようなタプルは、少なくとも 1 つの項目がタプルに含まれている必要がある形式 (応答、ステータス、ヘッダー) である必要があります。ステータス値はステータス コードをオーバーライドし、ヘッダーは追加のヘッダー値のリストまたは辞書にすることができます。

  • いずれも機能しない場合、Flask は戻り値が有効な WSGI アプリケーションであると想定し、それを応答オブジェクトに変換します。

ビューからブール値が返されるのをFlask見ると、それを WSGI アプリケーション インスタンスと見なそうとしますが、失敗します。

TrueまたはFalseビューから返したいものである場合は、強制的に文字列にする必要があります。

@app.route('/isconfirmed/<email>')
def isconfirmed(email):
    return str(models.UserTable.get(models.UserTable.email == email).confirmed)

ここで解決された関連する問題も参照してください。

于 2015-12-26T04:50:25.720 に答える