藍圖內使用認證裝飾從我想用下面的基本身份驗證裝飾在我的藍圖:如何燒瓶
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'函數,這是有道理的。非常感謝。 –