我将toString
功能用于Flask-Security,并且在我的自定义API登录请求处理程序中,我试图确保按照flask-security documentation on login_user()
的要求提交数据存储区更改。 / p>
我的登录代码位于一个蓝图中:
println
但是,当用户登录时,出现错误:toString
,因为我在蓝图中,而不是应用程序中。我该如何解决?
答案 0 :(得分:2)
Security()
对象决不是Flask应用程序对象的直接属性。您在这里的错误是app
是Blueprint
对象,这使事情更加混乱。无论如何,您通常应该不将app
用于蓝图对象。
您可以从首先创建Security(...)
实例的模块中导入对象,也可以通过{ {3}}:
extensions
接下来,您通常希望在响应完成后提交访问权限 ,因为这有助于最终用户更快地获得结果,并且还可以记录响应状态。使用current_app
reference在响应后运行提交:
from flask import current_app
security = current_app.extensions['security'] # or reference .datastore, etc.
并在您看来使用:
from flask import current_app, after_this_request
def flask_security_datastore_commit(response=None):
datastore = current_app.extensions['security'].datastore
datastore.commit()
return response