我想在我的蓝图中使用以下基本身份验证装饰器:
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
模块,该模块也需要一个数据库实例,它需要应用程序实例,因为Database()
模块使用应用程序进行配置:
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 模块,所以我得到了循环导入。有任何想法吗?