1

我正在尝试使用以下代码返回模型confirmed中用户的 BooleanField UserTable(这样我以后可以拒绝访问某些路由):

模型.py

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

    class Meta:
        database = db

应用程序.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是一个合法的查询,它返回一个布尔值 -TrueFalse.

现在,参考视图响应类型处理逻辑

视图函数的返回值会自动为您转换为响应对象。如果返回值是一个字符串,它会被转换为一个响应对象,该字符串作为响应正文、一个 200 OK 错误代码和一个 text/html mimetype。Flask 应用于将返回值转换为响应对象的逻辑如下:

  • 如果返回正确类型的响应对象,则直接从视图返回。

  • 如果它是一个字符串,则使用该数据和默认参数创建一个响应对象。

  • 如果返回元组,则元组中的项目可以提供额外信息。这样的元组必须采用(响应、状态、标题)形式,其中至少一项必须在元组中。状态值将覆盖状态代码,并且标头可以是附加标头值的列表或字典。

  • 如果这些都不起作用,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 回答