Szia! Filtering Flask beszállítóként sok embert láttam azon küszködni, hogy hogyan szűrje meg a Flask alkalmazás útvonalait URL-minták alapján. Lehet, hogy kissé technikásnak hangzik, de ne aggódj, azért vagyok itt, hogy lebontsam neked egy egyszerű, könnyed módon.
Először is értsük meg, miért szeretnénk szűrni a Flask alkalmazási útvonalait. Egy valós Flask alkalmazásban egy csomó útvonalat használhat. Némelyikük nyilvános hozzáférést biztosít, néhány belső használatra szolgál, és lehet, hogy bizonyos felhasználói szerepkörökhöz. Az útvonalak URL-minták alapján történő szűrése segít a hozzáférés kezelésében, a biztonság javításában és az alkalmazás szervezettebbé tételében.
Kezdjük a Lombik útvonalak alapjaival. Egy egyszerű Flask alkalmazásban az útvonalakat a@app.routelakberendező. Például:
from lombik import Flask app = Lombik(__name__) @app.route('/') def index(): return 'Ez a kezdőlap' @app.route('/about') def about(): return 'Ez a tájékoztató oldal'
Ebben az egyszerű alkalmazásban két útvonalunk van: a gyökérút (/) és az útvonalat (/körülbelül). De mi van akkor, ha valamilyen szűrőt akarunk alkalmazni, mondjuk, hogy csak bizonyos URL-mintákhoz férhessen hozzá?
Ennek egyik módja a Flask's használatakérés előttlakberendező. Ez a dekorátor lehetővé teszi egy funkció futtatását az egyes kérések feldolgozása előtt. Segítségével ellenőrizhetjük a kért URL-t egy sor minta alapján.
lombikból import Lombik, kérés, megszakítás app = Lombik(__name__) ALLOWED_PATTERNS = [ '/', '/about' ] @app.before_request def restrikt_access(): ha a request.path nincs az ALLOWED_PATTERNS-ben: abort(403) @app.route('/): return a kezdőlap.' def @app.route('/about') def about(): return 'Ez a névjegyoldal'
Ebben a kódban akorlátozza a hozzáféréstfüggvény minden kérés előtt lefut. Ellenőrzi, hogy a kért URL elérési út aALLOWED_PATTERNSlista. Ha nem, akkor 403-as tiltott hibát ad vissza. Ez a pontos URL-egyezéseken alapuló szűrés nagyon egyszerű formája.


De mi van akkor, ha rugalmasabb mintákat, például reguláris kifejezéseket akarunk használni? Nos, a Flaskban nincs beépített - regex alapú - útvonalszűrés támogatása, de mi magunk is megvalósíthatjuk.
Íme egy példa arra, hogyan lehet reguláris kifejezéseket használni az útvonalak szűrésére:
import re from lombik import Lombik, kérés, megszakítás app = Lombik(__name__) ALLOWED_REGEX = [ re.compile(r'^/$'), re.compile(r'^/about$') ] @app.before_request def regex_restrict_access(): minta esetén ALLOWED_REGEX:re:stque pattern. abort(403) @app.route('/') def index(): return 'Ez a kezdőlap' @app.route('/about') def about(): return 'Ez a névjegyoldal'
Ebben a kódban definiáltuk a lefordított reguláris kifejezések listáját. Aregex_restrict_accessfüggvény végigfut ezeken a mintákon, és ellenőrzi, hogy valamelyik megfelel-e a kért URL-útvonalnak. Ha talál egyezést, a kérés engedélyezett; ellenkező esetben 403-as hibával blokkolja.
Most beszéljünk egy kicsit az útvonalszűrés gyakorlati alkalmazásairól. Például egy e-kereskedelmi alkalmazásban korlátozhatja a hozzáférést az adminisztratív útvonalakhoz. Meghatározhat egy mintát az összes rendszergazdával kapcsolatos URL-hez, pl/admin/*és csak hitelesített adminisztrátor felhasználók számára engedélyezi az útvonalak elérését.
Egy másik használati eset lehet API-ban. Előfordulhat, hogy korlátozni szeretné a hozzáférést bizonyos API-végpontokhoz az ügyfél jogosultsági szintje alapján. Az útvonalak URL-minták alapján történő szűrésével könnyedén megvalósíthatja ezt a fajta hozzáférés-szabályozást.
Szűrőlombik beszállítóként szeretném megemlíteni termékeinket is. Kiváló minőségű szűrőlombik széles választékát kínáljuk, amelyek tökéletesek laboratóriumi használatra. Nézze meg a miLaboratóriumi átlátszó üveg szűrőlombikok felső csővelésLaboratóriumi üveg kúpos alakú Erlenmeyer szűrőlombikok felső csővel. Ezek a lombikok csúcsminőségű üveganyagokból készülnek, és hatékony és megbízható szűrési műveletekre tervezték.
Menjünk egy kicsit mélyebben a fejlettebb útvonalszűrési forgatókönyvekbe. Például előfordulhat, hogy több bérlős alkalmazással rendelkezik, ahol minden bérlőnek saját engedélyezett útvonala van. Ennek kezelésére tárolhatja az engedélyezett mintákat egy adatbázisban, és lekérdezheti a kérésben szereplő bérlői információk alapján.
from flask import Lombik, kérés, megszakítás import sqlite3 app = Lombik(__name__) def get_allowed_patterns(tenant_id): conn = sqlite3.connect('tenants.db') cursor = conn.cursor() cursor.execute("SELECT minták FROM bérlőktől WHERE result_id =,)fetchone =.sor. conn.close() if result: return result[0].split(',') return [] @app.before_request def tenant_restrict_access(): tenant_id = request.headers.get('X - Bérlő - ID') if tenant_id: enabled_patterns = get_allowed_patterns: engedélyezve van_ kérés0 @app.route('/') def index(): return 'Ez a kezdőlap' @app.route('/about') def about(): return 'Ez a névjegyoldal'
Ebben a példában egy SQLite-adatbázist kérdezünk le, hogy megkapjuk az adott bérlő számára engedélyezett mintákat. A bérlői azonosító a kérés fejlécéből származik. Ha a kért URL nem szerepel az adott bérlő számára engedélyezett minták listájában, a hozzáférés megtagadva.
A biztonság és a hozzáférés-szabályozás mellett az útvonalszűrés is használható a teljesítmény optimalizálására. Például átirányíthatja a bizonyos mintáknak megfelelő kéréseket egy másik szerverre, vagy gyorsítótárba helyezheti az adott URL-minták válaszait.
Nos, ez egy összefoglaló a Flask alkalmazás útvonalainak URL-minták alapján történő szűrésére. Remélem, ez a blogbejegyzés jó megértést adott a témáról. Ha érdeklik szűrőpalackjaink, vagy bármilyen kérdése van a Flaskban található útvonalszűréssel kapcsolatban, ne habozzon kapcsolatba lépni egy beszerzési megbeszéléssel. Azért vagyunk itt, hogy segítsünk minden igényében!
Referenciák:
- Lombik dokumentációja
- Python reguláris kifejezések dokumentációja
- SQLite dokumentáció
