ブループリントで次の基本認証デコレーターを使用したいと考えています。
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 つにインポートしようとすると失敗します。認証モジュールがアプリ モジュールをインポートし、ブループリントがアプリ モジュールを拡張しているため、循環インポートを取得しているためだと思います。何か案は?