ブループリントで次の基本認証デコレーターを使用したいと考えています。
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)
以前は、これらすべてを 1 つのファイルでインスタンス化することでアプリケーションがよりシンプルになったときに、これを機能させていました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が、設計図の 1 つにインポートしようとすると失敗します。認証モジュールがアプリ モジュールをインポートし、ブループリントがアプリ モジュールを拡張しているため、循環インポートを取得しているためだと思います。何か案は?