蓝图内使用认证装饰从我想用下面的基本身份验证装饰在我的蓝图:如何烧瓶
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实例,这需要应用实例作为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.py模块而不是main.py.我现在正在main.py模块中注册蓝图,并避免任何循环导入。这也允许我在auth模块中定义'require_auth'函数,这是有道理的。非常感谢。 –