问题描述
我正在更新现有的大学系内部网站,以便使用 Flask 运行。在我们完全发布将使用 shibboleth 管理身份验证的项目之前,我一直在尝试使用 this tutorial 设置使用 htpassword 进行测试的身份验证。我可以使用适用于单个文件的 htpasswords 进行身份验证,但我不知道如何将身份验证添加到单独的文件中。目前,该项目如下所示:
这是我名为 app.py
的主文件:
#app.py
from flask import Flask
from flask_htpasswd import HtPasswdAuth
app = Flask(__name__)
app.config['FLASK_HTPASSWD_PATH'] = '.htpasswd'
app.config['FLASK_SECRET'] = "Super secret key that I will change later"
htpasswd = HtPasswdAuth(app)
import exampleRoute
@app.route('/')
@htpasswd.required
def home(user):
return "This is the homepage"
这是我的一个名为 exampleRoute.py
的路由文件的示例:
# exampleRoute.py
from app import app
from flask import Flask
@app.route('/exampleRoute')
def exampleRoute():
return "This is an example route in another file"
当我将 @htpassword.required
装饰器放在 exampleRoute()
前面时,我收到一条错误消息,指出 htpassword
未定义(这是有道理的)。我尝试以几种不同的方式导入应用程序配置,但充其量,我最终得到了循环依赖。我知道我可以将身份验证代码放在一个单独的文件中,然后将其导入我的所有端点,但我认为这是不可能的,因为此方法已合并到应用程序配置中。
解决方法
我最终收到了来自 reddit 用户 answer 的 alexisprince。解决方案是使用从另一个文件(名为 htpasswd
)导入 extensions.py
的蓝图。