Salut! En tant que fournisseur de Filtering Flask, j'ai vu beaucoup de gens avoir du mal à filtrer les itinéraires de l'application Flask en fonction de modèles d'URL. Cela peut sembler un peu technique, mais ne vous inquiétez pas, je suis là pour vous l'expliquer de manière simple.
Tout d’abord, comprenons pourquoi nous souhaitons filtrer les routes d’application Flask. Dans une application Flask du monde réel, vous pouvez avoir un certain nombre d'itinéraires. Certains sont destinés à un accès public, d'autres à un usage interne et d'autres encore peuvent être destinés à des rôles d'utilisateur spécifiques. Le filtrage des itinéraires en fonction des modèles d'URL aide à gérer l'accès, à améliorer la sécurité et à rendre l'application plus organisée.
Commençons par les bases des routes Flask. Dans une application Flask simple, vous définissez des itinéraires à l'aide du@app.routedécorateur. Par exemple:
from flask import Flask app = Flask(__name__) @app.route('/') def index() : return 'Ceci est la page d'accueil' @app.route('/about') def about() : return 'Ceci est la page à propos'
Dans cette application simple, nous avons deux routes : la route racine (/) et l'itinéraire à propos (/à propos). Mais que se passe-t-il si nous souhaitons appliquer un filtre, par exemple, pour autoriser uniquement l'accès à certains modèles d'URL ?
Une façon de procéder consiste à utiliser Flaskavant_requestdécorateur. Ce décorateur vous permet d'exécuter une fonction avant que chaque requête ne soit traitée. Nous pouvons l'utiliser pour vérifier l'URL demandée par rapport à un ensemble de modèles.
from flask import Flask, request, abort app = Flask(__name__) ALLOWED_PATTERNS = [ '/', '/about' ] @app.before_request def restrict_access() : si request.path n'est pas dans ALLOWED_PATTERNS : abort(403) @app.route('/') def index() : return 'Ceci est la page d'accueil' @app.route('/about') def about() : return 'Ceci est la page à propos'
Dans ce code, lerestreindre_accèsla fonction est exécutée avant chaque requête. Il vérifie si le chemin de l'URL demandé se trouve dans leALLOWED_PATTERNSliste. Si ce n'est pas le cas, il renvoie une erreur 403 Forbidden. Il s'agit d'une forme très basique de filtrage basée sur des correspondances exactes d'URL.


Mais que se passe-t-il si nous souhaitons utiliser des modèles plus flexibles, comme des expressions régulières ? Eh bien, Flask n'a pas de prise en charge intégrée pour le filtrage de routes basé sur les regex, mais nous pouvons l'implémenter nous-mêmes.
Voici un exemple d'utilisation d'expressions régulières pour filtrer les itinéraires :
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() : pour le modèle dans ALLOWED_REGEX : if pattern.match(request.path) : break else : abort(403) @app.route('/') def index() : return 'Ceci est la page d'accueil' @app.route('/about') def about() : return 'Ceci est la page à propos'
Dans ce code, nous avons défini une liste d'expressions régulières compilées. Leregex_restrict_accessLa fonction parcourt ces modèles et vérifie si l’un d’entre eux correspond au chemin d’URL demandé. Si une correspondance est trouvée, la demande est autorisée ; sinon, il est bloqué avec une erreur 403.
Parlons maintenant un peu des applications pratiques du filtrage de routes. Par exemple, dans une application de commerce électronique, vous souhaiterez peut-être restreindre l'accès aux voies administratives. Vous pouvez définir un modèle pour toutes les URL liées à l'administrateur, comme/admin/*et autorisez uniquement les utilisateurs administrateurs authentifiés à accéder à ces itinéraires.
Un autre cas d’utilisation pourrait concerner une API. Vous souhaiterez peut-être limiter l'accès à certains points de terminaison d'API en fonction du niveau d'autorisation du client. En filtrant les itinéraires en fonction de modèles d'URL, vous pouvez facilement mettre en œuvre ce type de contrôle d'accès.
En tant que fournisseur de flacons filtrants, je souhaite également mentionner nos produits. Nous proposons une large gamme de flacons filtrants de haute qualité, parfaits pour une utilisation en laboratoire. Consultez notreFlacons filtrants en verre transparent de laboratoire avec tubulure supérieureetFlacons filtrants Erlenmeyer de forme conique en verre de laboratoire avec tubulation supérieure. Ces flacons sont fabriqués à partir de matériaux en verre de première qualité et sont conçus pour des opérations de filtrage efficaces et fiables.
Examinons un peu plus en profondeur les scénarios de filtrage d'itinéraire plus avancés. Par exemple, vous pouvez avoir une application multi-locataire dans laquelle chaque locataire dispose de son propre ensemble de routes autorisées. Pour gérer cela, vous pouvez stocker les modèles autorisés dans une base de données et l'interroger en fonction des informations sur le locataire contenues dans la demande.
from flask import Flask, demande, abandon de l'importation sqlite3 app = Flask(__name__) def get_allowed_patterns(tenant_id): conn = sqlite3.connect('tenants.db') curseur = conn.cursor() curseur.execute("SELECT patterns FROM locataires WHERE id =?", (tenant_id,)) result = Cursor.fetchone() conn.close() if result: return result[0].split(',') return [] @app.before_request def tenant_restrict_access() : tenant_id = request.headers.get('X - Tenant - ID') if tenant_id : Allowed_patterns = get_allowed_patterns(tenant_id) if request.path n'est pas dans Allowed_patterns : abort(403) @app.route('/') def index() : return 'Ceci est la maison page' @app.route('/about') def about(): return 'Voici la page à propos'
Dans cet exemple, nous interrogeons une base de données SQLite pour obtenir les modèles autorisés pour un locataire particulier. L'ID de locataire est récupéré à partir des en-têtes de requête. Si l'URL demandée ne figure pas dans la liste des modèles autorisés pour ce locataire, l'accès est refusé.
Outre la sécurité et le contrôle d’accès, le filtrage des routes peut également être utilisé pour optimiser les performances. Par exemple, vous pouvez rediriger les requêtes correspondant à certains modèles vers un autre serveur ou mettre en cache les réponses pour des modèles d'URL spécifiques.
Eh bien, voilà un aperçu de la façon de filtrer les itinéraires de l'application Flask en fonction des modèles d'URL. J'espère que cet article de blog vous a permis de bien comprendre le sujet. Si vous êtes intéressé par nos flacons filtrants ou si vous avez des questions sur le filtrage des itinéraires dans Flask, n'hésitez pas à nous contacter pour une discussion sur l'approvisionnement. Nous sommes là pour vous aider avec tous vos besoins !
Références :
- Documentation du flacon
- Documentation sur les expressions régulières Python
- Documentation SQLite
