如果 api-key 在请求标头内无效(或未指定),我已经为我的路由函数设置了一个装饰器来中止(401)。
因此,我在主模块(名为 app)的专用文件中定义了此函数,并将其导入到我的所有蓝图定义中。但从这个文件中,我无法访问应用程序对象来加载存储在 config.json 中的 API 密钥。我尝试使用 current_app,但出现错误告诉我无法在应用程序上下文之外使用它。我无法直接从应用程序模块导入应用程序对象,因为它会导致循环导入。
如果我在文件内声明装饰器__init__.py,我将面临同样的问题:我将无法从应用程序模块导入 require_apikey 函数,因为蓝图模块已在应用程序模块中导入以进行蓝图注册。
我认为我的设计存在一些问题。你能指出我的缺陷并帮助我改正吗?
我的项目目录如下所示:
project/
- run.py
- app/
- - __init__.py
- - player.py
- - require_apikey.py
Run Code Online (Sandbox Code Playgroud)
以下是这些文件的内容:
# run.py
from app import app
if __name__ == "__main__":
app.run()
Run Code Online (Sandbox Code Playgroud)
# app/__init__.py
from flask import (
Flask,
render_template,
jsonify)
from app.db import db
from app.player import player
app = Flask(__name__)
app.config.from_object("app.config.Config")
app.register_blueprint(player, url_prefix="/player/")
db.init_app(app)
with app.app_context():
db.create_all()
Run Code Online (Sandbox Code Playgroud)
# app/player.py
from flask import (
Blueprint,
request,
abort,
jsonify) …Run Code Online (Sandbox Code Playgroud)