ちょっと、そこ! Filtering Flask のサプライヤーとして、私は URL パターンに基づいて Flask アプリケーションのルートをフィルタリングする方法に苦労している多くの人を見てきました。少し専門的に聞こえるかもしれませんが、心配しないでください。ここでは簡単に説明します。
まず、Flask アプリケーション ルートをフィルタリングする理由を理解しましょう。現実の Flask アプリケーションでは、多数のルートがある可能性があります。パブリック アクセス用、内部使用用、および特定のユーザー ロール用のものもあります。 URL パターンに基づいてルートをフィルタリングすると、アクセスの管理、セキュリティの向上、アプリケーションの整理に役立ちます。
Flask ルートの基本から始めましょう。単純な Flask アプリケーションでは、次を使用してルートを定義します。@app.routeデコレーター。例えば:
from flask import Flask app = Flask(__name__) @app.route('/') defindex(): return 'これはホームページです' @app.route('/about') def about(): return 'これはaboutページです'
この単純なアプリには 2 つのルートがあります: ルート ルート (/) とルートについて (/について)。しかし、たとえば特定の URL パターンのみへのアクセスを許可するなど、何らかのフィルターを適用したい場合はどうすればよいでしょうか?
これを行う 1 つの方法は、Flask のbefore_requestデコレーター。このデコレータを使用すると、各リクエストが処理される前に関数を実行できます。これを使用して、要求された URL を一連のパターンと照合してチェックできます。
from flask import Flask, request, abort app = Flask(__name__) ALLOWED_PATTERNS = [ '/', '/about' ] @app.before_request defstrict_access(): request.path が ALLOWED_PATTERNS にない場合: abort(403) @app.route('/') defindex(): return 'これはホームページです' @app.route('/about') def about(): return 'これはAboutページです'
このコードでは、アクセス制限関数はすべてのリクエストの前に実行されます。要求された URL パスが許可されたパターンリスト。そうでない場合は、403 Forbidden エラーが返されます。これは、URL の正確な一致に基づくフィルタリングの非常に基本的な形式です。


しかし、正規表現など、より柔軟なパターンを使用したい場合はどうすればよいでしょうか?まあ、Flask には正規表現ベースのルート フィルタリングのサポートが組み込まれていませんが、それを自分で実装することはできます。
正規表現を使用してルートをフィルタリングする方法の例を次に示します。
import re from flask import Flask, request, abort app = Flask(__name__) ALLOWED_REGEX = [ re.compile(r'^/$'), re.compile(r'^/about$') ] @app.before_request def regex_restrict_access(): ALLOWED_REGEX のパターンの場合: if pattern.match(request.path): Break else: abort(403) @app.route('/') defindex(): return 'これはホームページです' @app.route('/about') def about(): return 'これはaboutページです'
このコードでは、コンパイルされた正規表現のリストを定義しました。のregex_restrict_access関数はこれらのパターンをループし、それらのいずれかが要求された URL パスに一致するかどうかを確認します。一致するものが見つかった場合、リクエストは許可されます。それ以外の場合は、403 エラーでブロックされます。
ここで、ルート フィルタリングの実際の応用について少し説明しましょう。たとえば、電子商取引アプリケーションでは、管理ルートへのアクセスを制限したい場合があります。すべての管理関連 URL のパターンを定義できます。/管理者/*そして、認証された管理者ユーザーのみがこれらのルートにアクセスできるようにします。
別の使用例は API にある可能性があります。クライアントの認証レベルに基づいて、特定の API エンドポイントへのアクセスを制限したい場合があります。 URL パターンに基づいてルートをフィルタリングすることで、この種のアクセス制御を簡単に実装できます。
濾過フラスコのサプライヤーとして、当社の製品についても触れておきたいと思います。当社は、実験室での使用に最適な高品質の濾過フラスコを幅広く提供しています。私たちをチェックしてください上部管付き実験用透明ガラス濾過フラスコそして上部チューブ付き実験用ガラス製円錐形三角フラスコ。これらのフラスコは一流のガラス素材で作られており、効率的で信頼性の高い濾過操作を行えるように設計されています。
より高度なルート フィルタリング シナリオをもう少し詳しく見てみましょう。たとえば、各テナントが独自の許可されたルートのセットを持つマルチテナント アプリケーションがあるとします。これに対処するには、許可されたパターンをデータベースに保存し、リクエスト内のテナント情報に基づいてクエリを実行します。
from flask import Flask、リクエスト、インポート中止 sqlite3 app = Flask(__name__) def get_allowed_patterns(tenant_id): conn = sqlite3.connect('tenants.db') カーソル = conn.cursor() Cursor.execute("SELECT pattern FROM tenants WHERE id =?", (tenant_id,)) result =cursor.fetchone() conn.close() if結果: return result[0].split(',') return [] @app.before_request def tenant_restrict_access(): tenant_id = request.headers.get('X - テナント - ID') if tenant_id: allowed_patterns = get_allowed_patterns(tenant_id) if request.path not in allowed_patterns: abort(403) @app.route('/') def index(): return 'これはホームページです' @app.route('/about') def about(): return 'これはaboutページです'
この例では、SQLite データベースにクエリを実行して、特定のテナントに許可されているパターンを取得します。テナント ID はリクエスト ヘッダーから取得されます。要求された URL がそのテナントの許可されたパターンのリストにない場合、アクセスは拒否されます。
セキュリティとアクセス制御に加えて、ルート フィルタリングをパフォーマンスの最適化にも使用できます。たとえば、特定のパターンに一致するリクエストを別のサーバーにリダイレクトしたり、特定の URL パターンに対する応答をキャッシュしたりできます。
これで、URL パターンに基づいて Flask アプリケーションのルートをフィルタリングする方法のまとめになりました。このブログ投稿がこのトピックについて十分に理解していただければ幸いです。当社のフィルタリング フラスコにご興味がある場合、または Flask のルート フィルタリングについてご質問がある場合は、調達に関するディスカッションにお気軽にお問い合わせください。あらゆるニーズにお応えいたします。
参考文献:
- Flask ドキュメント
- Python 正規表現のドキュメント
- SQLite ドキュメント
