gpt4 book ai didi

python - 如何在 Flask 的蓝图中使用身份验证装饰器

转载 作者:太空宇宙 更新时间:2023-11-04 01:22:05 24 4
gpt4 key购买 nike

我想在我的蓝图中使用以下基本身份验证装饰器:

def requires_auth(func):
@wraps(func)
def decorated(*args, **kwargs):
request_auth = request.authorization
if not request_auth or not auth.authenticate(request_auth.username, request_auth.password):
return api.response_auth_failed()
return func(*args, **kwargs)
return decorated

在蓝图中:

@bp.route("/")
@requires_auth
def root():
return "root"

但它依赖于 flask_peewee.auth 模块,该模块还需要一个 db 实例,这需要 app 实例,因为 Database() 模块使用该 app 进行配置:

db = Database(app)
auth = Auth(app, db)

我以前通过在一个 app.py 文件中实例化所有这些来简化应用程序,但现在我想更好地组织它。

是否可以将我的 db.Model 定义和上面的 requires_auth 装饰器移动到另一个文件,比如 db_models.py模块,并将 requires_auth 装饰器导入到我的个人蓝图定义中?如果我需要访问 app 对象来创建 db 对象,我该怎么做?


编辑:我重新组织了我的应用程序,使其看起来像这样:http://charlesleifer.com/blog/structuring-flask-apps-a-how-to-for-those-coming-from-django/我将 requires_auth 函数放在我的 auth.py 模块中,我可以在 view.py 中导入和使用它,但是当我尝试导入时它进入我的蓝图之一它失败了。我认为这是因为 auth 模块导入了 app 模块,而蓝图正在扩展 app 模块,所以我得到了一个循环导入。有什么想法吗?

最佳答案

正如您所指出的,我认为问题出在您的模块组织上。如果您创建一个包含 requires_auth 的装饰器模块会怎么样?

然后您将构建您的导入流程:

  1. app.py(实例化应用程序和数据库)
  2. auth.py(实例化 auth,从 app.py 导入)
  3. api.py(实例化 api,从 app.py 导入)
  4. decorators.py(定义 requires_auth,从 auth 和 api 导入)
  5. blueprints/views.py(从 app.py、auth.py、api.py、decorators.py 导入)
  6. main.py(导入应用程序、身份验证、api、装饰器、蓝图)并且是应用程序的入口点。

关于python - 如何在 Flask 的蓝图中使用身份验证装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20555137/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com