我正试图返回UserTable
模型中用户的confirmed
BooleanField(这样我以后就可以拒绝访问某些路由),代码为:
型号.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
我尝试使用访问email
和password
CCD_ 6等,并且它工作得很好。我不明白为什么它不能从BooleanField返回True或False???
如果有任何相关性/帮助的话,我会使用Postgres作为我的数据库。
非常感谢您的帮助!!!
以下是正在发生的事情。
models.UserTable.get(models.UserTable.email == email).confirmed
是一个合法的查询,它返回一个布尔值True
或False
。
现在,参考视图响应类型处理逻辑:
视图函数的返回值自动转换为一个响应对象。如果返回值是字符串,则为转换为以字符串为响应主体的响应对象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)
另请参阅此处解决的相关问题:
- 为什么json.dumps()在Flask中是必须的