【问题标题】:Peewee Flask Trying to Return Data from a BooleanFieldPeewee Flask 试图从 BooleanField 返回数据
【发布时间】:2016-03-31 19:51:51
【问题描述】:

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

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 作为我的数据库。

非常感谢任何帮助!!!

【问题讨论】:

    标签: python python-3.x flask peewee flask-peewee


    【解决方案1】:

    这就是正在发生的事情。

    models.UserTable.get(models.UserTable.email == email).confirmed 是一个合法查询,它返回一个布尔值 - TrueFalse

    现在,指的是view response type handling logic

    视图函数的返回值会自动转换为 为您提供响应对象。如果返回值是一个字符串 转换为以字符串为响应主体的响应对象,一个 200 OK 错误代码和 text/html mimetype。 Flask 的逻辑 适用于将返回值转换为响应对象为 如下:

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

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

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

    • 如果 这些都不起作用,Flask 将假定返回值是有效的 WSGI 应用程序并将其转换为响应对象。

    Flask 看到从视图返回的布尔值时,它会尝试将其视为 WSGI 应用程序实例,但失败了。

    如果你想从视图返回 TrueFalse,你必须强制它是一个字符串:

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

    另请参阅此处已解决的相关问题:

    【讨论】:

    • 啊!我刚刚学习 Flask,对这种理论非常模糊。我之前曾尝试在 if 语句中使用查询并手动返回 True 或 False - 不明白我无法返回布尔值 - 这让我很困惑。我一定会阅读这部分文档!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 2021-12-26
    相关资源
    最近更新 更多