Bok tamo! Kao dobavljač Filtering Flaska, vidio sam puno ljudi koji se bore s tim kako filtrirati rute Flask aplikacije na temelju URL uzoraka. Možda zvuči pomalo tehnički, ali ne brinite, ovdje sam da vam to objasnim na jednostavan - lak način.
Prvo, shvatimo zašto bismo željeli filtrirati rute Flask aplikacije. U Flask aplikaciji u stvarnom svijetu možda imate hrpu ruta. Neki su za javni pristup, neki su za internu upotrebu, a neki mogu biti za određene korisničke uloge. Filtriranje ruta na temelju URL uzoraka pomaže u upravljanju pristupom, poboljšavanju sigurnosti i čini aplikaciju organiziranijom.
Počnimo s osnovama Flask ruta. U jednostavnoj aplikaciji Flask, definirate rute pomoću@aplikacija.rutadekorater. Na primjer:
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return 'Ovo je početna stranica' @app.route('/about') def about(): return 'Ovo je stranica o'
U ovoj jednostavnoj aplikaciji imamo dvije rute: korijensku rutu (/) i o ruti (/oko). Ali što ako želimo primijeniti neki filtar, recimo, da dopustimo pristup samo određenim obrascima URL-a?
Jedan od načina da to učinite je korištenje Flaskaprije_zahtjevadekorater. Ovaj vam dekorater omogućuje pokretanje funkcije prije obrade svakog zahtjeva. Možemo ga koristiti za provjeru traženog URL-a prema skupu uzoraka.
from flask import Flask, zahtjev, prekid aplikacije = Flask(__name__) ALLOWED_PATTERNS = [ '/', '/about' ] @app.before_request def restrict_access(): ako request.path nije u ALLOWED_PATTERNS: abort(403) @app.route('/') def index(): return 'Ovo je početna stranica' @app.route('/about') def about(): return 'Ovo je stranica o'
U ovom kodu,ograničiti_pristupfunkcija se pokreće prije svakog zahtjeva. Provjerava je li traženi URL put uDOPUSTENI_UZORACIpopis. Ako nije, vraća pogrešku 403 Forbidden. Ovo je vrlo osnovni oblik filtriranja temeljen na točnim podudaranjima URL-ova.


Ali što ako želimo koristiti fleksibilnije uzorke, poput regularnih izraza? Pa, Flask nema ugrađenu podršku za filtriranje rute temeljeno na regularnim izrazima, ali možemo ga implementirati sami.
Evo primjera kako koristiti regularne izraze za filtriranje ruta:
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(): za uzorak u ALLOWED_REGEX: if pattern.match(request.path): break else: abort(403) @app.route('/') def index(): return 'Ovo je početna stranica' @app.route('/about') def about(): return 'Ovo je stranica o'
U ovom smo kodu definirali popis kompiliranih regularnih izraza. Theregex_restrict_accessfunkcija prolazi kroz te uzorke i provjerava odgovara li bilo koji od njih traženoj putanji URL-a. Ako se pronađe podudaranje, zahtjev je dopušten; inače je blokiran s pogreškom 403.
Razgovarajmo sada malo o praktičnim primjenama filtriranja rute. Na primjer, u aplikaciji za e-trgovinu, možda biste željeli ograničiti pristup administrativnim rutama. Možete definirati uzorak za sve URL-ove koji se odnose na administratora, kao što je/admin/*i samo ovlaštenim administratorima dopustite pristup tim rutama.
Drugi slučaj upotrebe mogao bi biti u API-ju. Možda biste željeli ograničiti pristup određenim krajnjim točkama API-ja na temelju klijentove razine autorizacije. Filtriranjem ruta na temelju URL uzoraka možete jednostavno implementirati ovu vrstu kontrole pristupa.
Kao dobavljač boca za filtriranje, također želim spomenuti naše proizvode. Nudimo širok izbor visokokvalitetnih boca za filtriranje koje su savršene za laboratorijsku upotrebu. Provjerite našeLaboratorijske tikvice za filtriranje od prozirnog stakla s gornjom cjevčicomiLaboratorijske staklene Erlenmeyerove tikvice za filtriranje stožastog oblika s gornjom tubulacijom. Ove tikvice izrađene su od vrhunskih staklenih materijala i dizajnirane su za učinkovite i pouzdane operacije filtriranja.
Idemo malo dublje u naprednije scenarije filtriranja ruta. Na primjer, možda imate aplikaciju s više stanara gdje svaki stanar ima vlastiti skup dopuštenih ruta. Da biste to riješili, možete pohraniti dopuštene uzorke u bazu podataka i postavljati upite na temelju informacija o stanarima u zahtjevu.
from flask import Flask, zahtjev, abort import sqlite3 app = Flask(__name__) def get_allowed_patterns(tenant_id): conn = sqlite3.connect('tenants.db') cursor = conn.cursor() cursor.execute("SELECT patterns FROM tenants 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 not in allowed_patterns: abort(403) @app.route('/') def index(): return 'Ovo je početna stranica' @app.route('/about') def about(): return 'Ovo je stranica o'
U ovom primjeru postavljamo upit SQLite bazi podataka kako bismo dobili dopuštene uzorke za određenog stanara. ID stanara se dohvaća iz zaglavlja zahtjeva. Ako traženi URL nije na popisu dopuštenih uzoraka za tog stanara, pristup je odbijen.
Uz sigurnost i kontrolu pristupa, filtriranje rute također se može koristiti za optimizaciju performansi. Na primjer, možete preusmjeriti zahtjeve koji odgovaraju određenim obrascima na drugi poslužitelj ili spremiti odgovore za određene URL uzorke.
Pa, to je sažetak o tome kako filtrirati rute Flask aplikacije na temelju URL uzoraka. Nadam se da vam je ovaj post na blogu dobro razumio temu. Ako ste zainteresirani za naše boce za filtriranje ili imate bilo kakva pitanja o filtriranju rute u Flasku, ne ustručavajte se kontaktirati za raspravu o nabavi. Tu smo da vam pomognemo sa svim vašim potrebama!
Reference:
- Flask Dokumentacija
- Dokumentacija Python regularnih izraza
- SQLite dokumentacija
