Construirea de vederi în Flask

În cadrul modelului sau paradigmei de dezvoltare pe care o propune BalonUnul dintre cele mai importante puncte este gestionarea vizualizărilor, deoarece acestea ne permit să definim modul în care utilizatorul va interacționa cu pagina sau aplicația noastră.

Cel mai simplu mod de a lucra cu o vizualizare este prin definirea operației direct în definirea căii sale, cu toate acestea acest lucru nu este întotdeauna util sau adecvat, mai ales dacă construim aplicații mari.

CerințeAvem nevoie de o instalare funcțională a Balon iar din motive de compatibilitate avem nevoie de o versiune mai mare decât cea 0.7 deoarece una dintre componentele cu care vom lucra nu a fost inclusă în cadru decât după versiunea menționată. De asemenea, trebuie să pornim o aplicație sau să avem o aplicație Balon astfel încât să putem include exemplele în secțiunea de vizualizări și astfel să le putem executa prin browser.

Vizualizări bazate pe roluri


Este una dintre cele mai simple modalități de a construi interacțiunea cu utilizatorul, trebuie doar să scriem o funcție și să o decorăm cu ruta, acest lucru se întâmplă atunci când routerul Balon primește cererea, verifică dacă există o funcție care așteaptă ruta respectivă și apoi, dacă o primește, o execută.

În general, acest tip de vizualizări necesită cel puțin metoda OBȚINE de HTTPCu toate acestea, ca o bună practică și din motive de securitate, dacă dorim să adăugăm valori structurii noastre de persistență a datelor, putem folosi și metoda POST.

Crearea unei vizualizări cu GET


Vom crea o vizualizare folosind metoda OBȚINEPentru a face acest lucru, trebuie pur și simplu să îi definiți numele într-o funcție și să îi atribuiți un traseu, apoi în interiorul funcției vom plasa conținutul nostru, să vedem următorul cod pentru a ne ilustra.
 @ app.route ('/ view-get') def view (): value = request.args.get ('content', 'sample') return 'Aceasta este o vizualizare utilizând GET și primește o valoare:% s'% valoare
În cod, atunci vedem cum folosim decorator Pentru a indica ce traseu așteptăm, definim funcția corespunzătoare și în acest sens apelăm cerere la argumentele primite de OBȚINE, în acest caz, căutăm un argument numit conținut și îl atribuim unei variabile numite valoare, dacă acest argument nu există, „eșantion” va fi plasat ca valoare implicită și, în cele din urmă, returnăm un text și transmitem conținutul valorii .

Dacă vom rula exemplul nostru în browser, am obține următoarele:

Crearea unei vizualizări cu POST


Ce se întâmplă dacă ceea ce dorim este să primim date sensibile și nu vrem să le trecem prin parametri în adresa URL, deoarece în aceste cazuri trebuie să folosim metoda POST, deoarece trimite datele ascunse din vizualizarea utilizatorului, desigur acolo sunt alte măsuri de securitate pe care ar trebui să le folosim, dar în acest moment nu avem nevoie de ele pentru acest caz.

Pentru a construi o vizualizare care primește date prin POST, trebuie doar să indicați metoda așteptată în decorator care primește ruta pe care o dorim, pentru aceasta folosim parametrul suplimentar metode.

Apoi, în cadrul funcției noastre, putem folosi cerere pentru a obține valorile, cu toate acestea, spre deosebire de exemplul anterior, în loc de a cere argumente, trebuie să indicăm că primim valorile dintr-un formular. Să ne uităm la cod pentru ceea ce tocmai am explicat.

 @ app.route ('/ post-view', methods = ['POST',]) def post_view (): value = request.form.get ('content', 'sample') return 'Aceasta este o vizualizare utilizând POST și primește o valoare:%% 'valoare
Putem observa că este aproape același cod ca mai sus, cu excepția diferențelor deja menționate, dar să vedem ce se întâmplă dacă rulăm codul nostru direct în browserul nostru:

MARI

Cum specificăm doar că putem primi metoda POST, când accesați prin OBȚINE aplicația noastră respinge intrarea și, prin urmare, ne trimite un cod 405 Metoda nu este permisă, deci fără valori provenite dintr-o solicitare POST, această vizualizare nu va afișa nicio informație.

Combinând GET și POST în vizualizare


Deoarece tratarea diferitelor vizualizări pentru fiecare metodă nu este întotdeauna ceea ce dorim, putem folosi ambele metode în aceeași vizualizare, acest lucru este foarte util mai ales atunci când dorim să procesăm formulare, de exemplu, cu metoda OBȚINE arătăm forma și cu POST procesăm expedierea aceluiași.

Pentru a utiliza acest mod trebuie doar să adăugăm OBȚINE în lista către care am trecut metode la definirea decorator cu calea, să vedem codul de mai jos:

 @ app.route ('/ view', methods = ['GET', 'POST',]) def view (): if request.method == "GET": return '' 'Show Views' '' else: value = request.form.get ('content', 'sample') return 'Aceasta este o vizualizare care utilizează GET și POST care primește o valoare:% s'% value
Când apelați ruta din browser cu metodă OBȚINE primim următoarele:

Apoi, scriind ceva în câmpul de text și apăsând Enter, trimitem formularul pe aceeași cale, dar cu metoda POST, ceea ce ne oferă un rezultat precum următorul:

Aici am scris apoi o adevărată vizualizare bazată pe funcții, care ne permite să folosim și să profităm de ambele metode de HTTP să facem operațiunile noastre.

Vizualizări bazate pe clasă


Deoarece crearea de funcții, chiar dacă acestea servesc scopurilor noastre, este uneori foarte greoaie și se pretează să aibă mai mult cod decât este necesar, Balon a implementat apelurile vizualizări bazate pe clasă, un concept de la care a împrumutat Django, și asta ne permite să scriem clase cu care vom genera vizualizări, aceste clase pot fi generice cu care putem face moștenire dacă dorim.

Pentru a utiliza acest tip de componentă trebuie mai întâi să importăm din flask.views, unde clasa Vedere Este o clasă generică care ne va permite să adăugăm funcționalitățile de bază pentru a putea expedia rute și a defini metode.

Crearea vederii noastre bazate pe clasă


În acest exemplu, vom crea aceeași vizualizare pe care am făcut-o în exemplul anterior, dar dintr-o abordare bazată pe clasă, putem stabili diferențele dintre ambele forme, amintiți-vă că, deși nu apare în codul de exemplu, am făcut import din clasa View.

Să vedem codul pentru exemplul nostru:

 class ViewClass (View): methods = ['GET', 'POST',] def dispatch_request (self): if request.method == "GET": return '' 'Show Views' '' if request.method == " POST ": value = request.form.get ('content', 'sample') return 'Aceasta este o vizualizare utilizând GET și POST care primește o valoare:% s'% valorapp.add_url_rule ('/ view-class', view_func = VistaClase.as_view ('clasa de vizualizare'))
Aceasta este cea mai de bază formă a acestui stil de vedere, totuși vedem că nu mai depindem de decorator, ceea ce facem este să numim metoda cerere_expediere și am trecut pe lângă el de sine astfel încât să primească același obiect cu acesta putem determina solicitările pe care le primim, apoi indicăm că vom primi ambele metode și în cele din urmă ne definim comportamentele, rezultatul pe browser va fi același cu cel anterior, vom avea un câmp și când îl vom trimite vom primi răspunsul specificat.

Dar dacă vrem să scriem un cod mult mai curat? Pentru aceasta putem folosi clasa MethodView de Balon ceea ce ne permite să creăm metode în cadrul clasei pentru a defini metodele HTTP într-un mod mai simplu.

Să vedem următorul exemplu în care rescriem codul anterior pentru a utiliza acest mod:

 class ViewClass (MethodView): def get (self): return '' 'Show Views' '' def post (self): value = request.form.get ('content', 'sample') return 'Aceasta este o vizualizare folosind GET și POST care primește o valoare:% s '% valorapp.add_url_rule (' / view-class ', view_func = ViewClass.as_view (' view-class '))
După cum putem vedea, am renunțat la definirea metodelor pe care le vom primi, în plus, nu mai folosim metoda expediere, pur și simplu definim ce vom face în metodă POST, și ce vom face în GET, oferind astfel mult mai multă curățare vederii noastre.

Există încă o dezbatere care, dacă este mai bine viziuni bazate pe roluri valuri bazate pe clase, dar într-adevăr nu există una mai bună decât cealaltă, există pur și simplu două moduri de lucru, recomandarea este că dacă vizualizarea este foarte simplă o putem face cu funcții și dacă are deja o logică mai completă o facem cu clase .

Cu aceasta am terminat acest tutorial, în care am construit o bază importantă, știind cum funcționează vizualizările și cum putem lucra cu diferitele lor metode. HTTP, deoarece acesta este fundamentul pe care îl putem folosi pentru a crea aplicații mai avansate.

Vei ajuta la dezvoltarea site-ului, partajarea pagina cu prietenii

wave wave wave wave wave