Hallo! Als Lieferant von Filtering Flask habe ich viele Leute erlebt, die damit zu kämpfen hatten, die Routen der Flask-Anwendung anhand von URL-Mustern zu filtern. Es mag etwas technisch klingen, aber keine Sorge, ich bin hier, um es Ihnen auf einfache Weise aufzuschlüsseln.
Lassen Sie uns zunächst verstehen, warum wir Flask-Anwendungsrouten filtern möchten. In einer realen Flask-Anwendung verfügen Sie möglicherweise über eine Reihe von Routen. Einige sind für den öffentlichen Zugriff bestimmt, andere für den internen Gebrauch und einige könnten für bestimmte Benutzerrollen bestimmt sein. Das Filtern von Routen basierend auf URL-Mustern hilft bei der Zugriffsverwaltung, der Verbesserung der Sicherheit und der besseren Organisation der Anwendung.
Beginnen wir mit den Grundlagen der Flask-Routen. In einer einfachen Flask-Anwendung definieren Sie Routen mithilfe von@app.routeDekorateur. Zum Beispiel:
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return 'This is the home page' @app.route('/about') def about(): return 'This is the about page'
In dieser einfachen App haben wir zwei Routen: die Root-Route (/) und die About-Route (/um). Was aber, wenn wir einen Filter anwenden möchten, um beispielsweise nur den Zugriff auf bestimmte URL-Muster zu ermöglichen?
Eine Möglichkeit hierfür ist die Verwendung von Flask’sbefore_requestDekorateur. Mit diesem Dekorator können Sie eine Funktion ausführen, bevor jede Anfrage verarbeitet wird. Wir können damit die angeforderte URL anhand einer Reihe von Mustern überprüfen.
from flask import Flask, request, abort app = Flask(__name__) ALLOWED_PATTERNS = [ '/', '/about' ] @app.before_request def strict_access(): if request.path not in ALLOWED_PATTERNS: abort(403) @app.route('/') def index(): return 'This is the home page' @app.route('/about') def about(): return „Dies ist die About-Seite“
In diesem Code ist dierestriktiver_ZugriffDie Funktion wird vor jeder Anfrage ausgeführt. Es prüft, ob sich der angeforderte URL-Pfad im befindetALLOWED_PATTERNSListe. Ist dies nicht der Fall, wird der Fehler 403 Forbidden zurückgegeben. Dies ist eine sehr einfache Form der Filterung, die auf genauen URL-Übereinstimmungen basiert.


Was aber, wenn wir flexiblere Muster wie reguläre Ausdrücke verwenden möchten? Nun, Flask verfügt nicht über eine integrierte Unterstützung für Regex-basierte Routenfilterung, aber wir können sie selbst implementieren.
Hier ist ein Beispiel für die Verwendung regulärer Ausdrücke zum Filtern von Routen:
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(): für Muster in ALLOWED_REGEX: if pattern.match(request.path): break else: abort(403) @app.route('/') def index(): return 'Dies ist die Startseite' @app.route('/about') def about(): return 'Dies ist die About-Seite'
In diesem Code haben wir eine Liste kompilierter regulärer Ausdrücke definiert. Derregex_restrict_accessDie Funktion durchläuft diese Muster und prüft, ob eines davon mit dem angeforderten URL-Pfad übereinstimmt. Wenn eine Übereinstimmung gefunden wird, wird die Anfrage zugelassen; andernfalls wird es mit einem 403-Fehler blockiert.
Lassen Sie uns nun ein wenig über die praktischen Anwendungen der Routenfilterung sprechen. Beispielsweise möchten Sie in einer E-Commerce-Anwendung möglicherweise den Zugriff auf Verwaltungsrouten einschränken. Sie könnten ein Muster für alle admin-bezogenen URLs definieren, z/admin/*und erlauben Sie nur authentifizierten Admin-Benutzern den Zugriff auf diese Routen.
Ein weiterer Anwendungsfall könnte eine API sein. Möglicherweise möchten Sie den Zugriff auf bestimmte API-Endpunkte basierend auf der Autorisierungsebene des Clients beschränken. Durch das Filtern von Routen basierend auf URL-Mustern können Sie diese Art der Zugriffskontrolle einfach implementieren.
Als Lieferant von Filterflaschen möchte ich auch unsere Produkte erwähnen. Wir bieten eine große Auswahl an hochwertigen Filterkolben, die sich perfekt für den Laborgebrauch eignen. Schauen Sie sich unsere anLabor-Filterkolben aus klarem Glas mit oberer RöhreUndKonische Erlenmeyer-Filterkolben aus Laborglas mit oberer Röhre. Diese Kolben bestehen aus erstklassigen Glasmaterialien und sind für effiziente und zuverlässige Filtervorgänge konzipiert.
Lassen Sie uns etwas tiefer auf fortgeschrittenere Routenfilterungsszenarien eingehen. Sie könnten beispielsweise über eine Multi-Tenant-Anwendung verfügen, bei der jeder Mandant über einen eigenen Satz zulässiger Routen verfügt. Um dies zu bewältigen, können Sie die zulässigen Muster in einer Datenbank speichern und diese basierend auf den Mandanteninformationen in der Anfrage abfragen.
from flask import Flask, request, abort import sqlite3 app = Flask(__name__) def get_allowed_patterns(tenant_id): conn = sqlite3.connect('tenants.db')cursor = conn.cursor() Cursor.execute("SELECT patterns FROMmieters WHERE id =?", (tenant_id,)) result =cursor.fetchone() conn.close() if result: return result[0].split(',') return [] @app.before_request defmieter_restrict_access():mieter_id = request.headers.get('X - Mieter - ID') wenn Mieter_id: erlaubte_muster = get_allowed_patterns(tenant_id) wenn request.path nicht in erlaubte_muster: abort(403) @app.route('/') def index(): return 'Dies ist das Zuhause Seite' @app.route('/about') def about(): return 'Dies ist die About-Seite'
In diesem Beispiel fragen wir eine SQLite-Datenbank ab, um die zulässigen Muster für einen bestimmten Mandanten abzurufen. Die Mandanten-ID wird aus den Anforderungsheadern abgerufen. Wenn die angeforderte URL nicht in der Liste der zulässigen Muster für diesen Mandanten enthalten ist, wird der Zugriff verweigert.
Neben Sicherheit und Zugriffskontrolle kann die Routenfilterung auch zur Leistungsoptimierung eingesetzt werden. Sie können beispielsweise Anfragen, die bestimmten Mustern entsprechen, an einen anderen Server umleiten oder die Antworten für bestimmte URL-Muster zwischenspeichern.
Nun, das ist eine Zusammenfassung, wie man die Routen der Flask-Anwendung basierend auf URL-Mustern filtert. Ich hoffe, dieser Blogbeitrag hat Ihnen ein gutes Verständnis für das Thema vermittelt. Wenn Sie an unseren Filterflaschen interessiert sind oder Fragen zur Routenfilterung in Flask haben, zögern Sie nicht, uns für ein Beschaffungsgespräch zu kontaktieren. Wir sind hier, um Ihnen bei all Ihren Bedürfnissen zu helfen!
Referenzen:
- Flaschendokumentation
- Dokumentation zu regulären Python-Ausdrücken
- SQLite-Dokumentation
