Python 如何使Flask OpenID对象成为应用程序的全局对象?
我在我愚蠢的实践应用程序中使用Flask OpenID进行用户登录 要做的第一件事是创建一个openid对象,该对象稍后用于修饰登录处理程序(以及其他内容): 但是,我想在我的应用程序的Python 如何使Flask OpenID对象成为应用程序的全局对象?,python,flask,openid,flask-login,Python,Flask,Openid,Flask Login,我在我愚蠢的实践应用程序中使用Flask OpenID进行用户登录 要做的第一件事是创建一个openid对象,该对象稍后用于修饰登录处理程序(以及其他内容): 但是,我想在我的应用程序的\uuu init\uuu.py文件中初始化Flask OpenID,但在其他文件中使用OpenID对象oid,比如我的应用程序的views.py文件和其他可能的文件。预期的方法是什么?flask开发者通常是如何将oid之类的东西放到应用程序的全局中的 在中,SQLAlchemy对象被移动到models模块,但在
\uuu init\uuu.py
文件中初始化Flask OpenID,但在其他文件中使用OpenID对象oid
,比如我的应用程序的views.py
文件和其他可能的文件。预期的方法是什么?flask开发者通常是如何将oid
之类的东西放到应用程序的全局中的
在中,SQLAlchemy对象被移动到models
模块,但在应用程序设置期间在其他地方初始化,这是有意义的,因为db
对象与模型耦合。OpenID对象遵循相同的模式。但是我不想把oid
放在views.py
中;它显然不属于那里。那么你会把它放在哪里呢?我可以想出解决方案,但我想知道flask开发人员通常做什么。以下是一些想法:
- 将
放入oid
中,并在那里初始化它。在此选项中,如何访问应用程序模块另一部分中的
?oid
- 为与Flask OpenID和Flask Login关联的对象和方法创建一个
文件。然后,auth.py
将在应用程序中的任何位置工作。然后,我是否为每个没有直接耦合到其他地方的扩展名创建一个新文件这是一种过激行为,还是一种扩大规模、保持组织有序的正确模式?auth.oid
- 或者,为所有这些小扩展对象创建一个文件,可能称为
或globals.py
。这看起来既尴尬又笨拙或者大多数flask应用程序最终都会有一个随机的存储桶来存储所有这些只需要放在某个地方的垃圾吗?exts.py
\uuuu init\uuuuuuupy
中创建auth
-这会导致视图和基础应用程序之间的循环引用-它可以工作,但更难考虑(因为移动两个不相关的导入可能会导致错误)auth
,因为您的身份验证方式取决于您的应用程序逻辑(例如,而不是您的域模型)
我建议完全避免#1(跳过“两个模块”阶段直接进入“三个或更多模块阶段”的额外成本可以忽略不计)。剩下的三个选项中哪一个适合您的项目实际上是特定于项目和开发人员的。副本使用Flask SQLAlchemy,而不是Flask OpenID,但模式是相同的。如果它不能回答您的问题,请告诉我!:-)@答案似乎是将Alchemy对象放在另一个模块中,幸运的是,它所属的模块已经存在。在我的例子中,没有这样的模块已经存在。我已经扩大了我的问题,以明确哪些问题仍然没有答案。
oid = flask.ext.openid.OpenID(app, '/path/to/store')
@oid.loginhandler
def login():
...
@oid.after_login
def after_login():
...