Ehilà! In qualità di fornitore di Filtering Flask, ho visto molte persone alle prese con come filtrare i percorsi dell'applicazione Flask in base ai modelli URL. Potrebbe sembrare un po' tecnico, ma non preoccuparti, sono qui per spiegartelo in modo semplice.
Prima di tutto, capiamo perché vorremmo filtrare i percorsi dell'applicazione Flask. In un'applicazione Flask nel mondo reale, potresti avere un sacco di percorsi. Alcuni sono per l'accesso pubblico, altri per uso interno e altri potrebbero essere destinati a ruoli utente specifici. Il filtraggio dei percorsi in base ai modelli URL aiuta a gestire l'accesso, migliorare la sicurezza e rendere l'applicazione più organizzata.
Cominciamo con le basi delle rotte Flask. In una semplice applicazione Flask, definisci le rotte utilizzando il file@app.percorsodecoratore. Per esempio:
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return 'Questa è la pagina iniziale' @app.route('/about') def about(): return 'Questa è la pagina delle informazioni'
In questa semplice app abbiamo due percorsi: il percorso root (/) e il percorso informazioni (/Di). E se volessimo applicare qualche filtro, ad esempio, per consentire l'accesso solo a determinati pattern URL?
Un modo per farlo è utilizzare Flask'sprima_richiestadecoratore. Questo decoratore ti consente di eseguire una funzione prima che ogni richiesta venga elaborata. Possiamo usarlo per verificare l'URL richiesto rispetto a una serie di modelli.
from flask import Flask, request, abort app = Flask(__name__) ALLOWED_PATTERNS = [ '/', '/about' ] @app.before_request def restring_access(): if request.path not in ALLOWED_PATTERNS: abort(403) @app.route('/') def indice(): return 'Questa è la home page' @app.route('/about') def about(): return 'Questa è la pagina delle informazioni'
In questo codice, illimitare_accessola funzione viene eseguita prima di ogni richiesta. Controlla se il percorso dell'URL richiesto è nel fileALLOWED_PATTERNSlista. In caso contrario, restituisce un errore 403 Forbidden. Questa è una forma molto semplice di filtraggio basata sulle corrispondenze esatte degli URL.


Ma cosa succede se vogliamo utilizzare modelli più flessibili, come le espressioni regolari? Bene, Flask non ha il supporto integrato per il filtraggio del percorso basato su regex, ma possiamo implementarlo da soli.
Ecco un esempio di come utilizzare le espressioni regolari per filtrare le rotte:
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(): for pattern in ALLOWED_REGEX: if pattern.match(request.path): break else: abort(403) @app.route('/') def index(): return 'Questa è la pagina iniziale' @app.route('/about') def about(): return 'Questa è la pagina delle informazioni'
In questo codice abbiamo definito un elenco di espressioni regolari compilate. ILregex_restrict_accessla funzione esegue il loop di questi modelli e controlla se qualcuno di essi corrisponde al percorso URL richiesto. Se viene trovata una corrispondenza, la richiesta viene consentita; in caso contrario viene bloccato con un errore 403.
Ora parliamo un po' delle applicazioni pratiche del filtraggio dei percorsi. Ad esempio, in un'applicazione di e-commerce, potresti voler limitare l'accesso ai percorsi amministrativi. Potresti definire un modello per tutti gli URL relativi all'amministratore, come/admin/*e consentire solo agli utenti amministratori autenticati di accedere a questi percorsi.
Un altro caso d'uso potrebbe essere in un'API. Potresti voler limitare l'accesso a determinati endpoint API in base al livello di autorizzazione del client. Filtrando i percorsi in base ai modelli URL, puoi facilmente implementare questo tipo di controllo degli accessi.
In qualità di fornitore di matracci filtranti, voglio menzionare anche i nostri prodotti. Offriamo una vasta gamma di beute filtranti di alta qualità, perfette per l'uso in laboratorio. Dai un'occhiata al nostroPalloni per filtraggio da laboratorio in vetro trasparente con tubolatura superioreEMatracci filtranti Erlenmeyer in vetro da laboratorio di forma conica con tubolazione superiore. Questi palloni sono realizzati con materiali di vetro di prima qualità e sono progettati per operazioni di filtraggio efficienti e affidabili.
Andiamo un po' più in profondità negli scenari di filtraggio dei percorsi più avanzati. Ad esempio, potresti avere un'applicazione multi-tenant in cui ogni tenant ha il proprio set di percorsi consentiti. Per gestire questa situazione, è possibile archiviare i modelli consentiti in un database ed eseguirne una query in base alle informazioni sul tenant nella richiesta.
from flask import Flask, request, abort import sqlite3 app = Flask(__name__) def get_allowed_patterns(tenant_id): conn = sqlite3.connect('tenants.db') cursore = conn.cursor() cursor.execute("SELECT pattern FROM tenant 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: aware_patterns = get_allowed_patterns(tenant_id) if request.path not in aware_patterns: abort(403) @app.route('/') def index(): return 'Questo è la home page' @app.route('/about') def about(): return 'Questa è la pagina delle informazioni'
In questo esempio, stiamo interrogando un database SQLite per ottenere i modelli consentiti per un particolare tenant. L'ID tenant viene recuperato dalle intestazioni della richiesta. Se l'URL richiesto non è nell'elenco dei modelli consentiti per quel tenant, l'accesso viene negato.
Oltre alla sicurezza e al controllo degli accessi, il filtraggio dei percorsi può essere utilizzato anche per l'ottimizzazione delle prestazioni. Ad esempio, puoi reindirizzare le richieste che corrispondono a determinati modelli a un server diverso o memorizzare nella cache le risposte per modelli URL specifici.
Bene, questa è una panoramica su come filtrare i percorsi dell'applicazione Flask in base ai modelli URL. Spero che questo post sul blog ti abbia dato una buona comprensione dell'argomento. Se sei interessato alle nostre fiaschette di filtraggio o hai domande sul filtraggio dei percorsi in Flask, non esitare a contattarci per una discussione sull'approvvigionamento. Siamo qui per aiutarti con tutte le tue esigenze!
Riferimenti:
- Documentazione sul pallone
- Documentazione sulle espressioni regolari di Python
- Documentazione SQLite
