flask design patterns
Acest tutorial explică câteva dintre modelele obișnuite de proiectare a balonului și cele mai bune practici de urmat în timp ce proiectați aplicații web cu exemple:
Proiectarea aplicațiilor este un aspect esențial al dezvoltării software-ului. O proiectare neplanificată a aplicației are ca rezultat o datorie tehnică insurmontabilă. Prin urmare, ori de câte ori dorim să ne scalăm aplicația, atunci este bine să încercăm modele de proiectare testate în timp.
Comunitatea Flask are multe astfel de exemple care vă pot inspira și vă pot afecta deciziile de proiectare atunci când doriți să încercați câteva modele pentru aplicația dvs. Flaskul este atât de neopinat și flexibil încât s-ar putea să doriți să combinați concepte din modelele existente și să creați unul nou.
=> Vizitați aici pentru a afla balonul de la zero
Ce veți învăța:
Modele de proiectare a balonului
De exemplu, Veți găsi multe exemple de la modelul MVC la Aplicații cu o singură pagină la modelul SAAS. Numiți paradigma designului și este deja încercată de cineva din comunitate și este disponibilă gratuit pentru a vă încerca.
Mai jos sunt enumerate câteva dintre depozitele la care merită să te uiți.
Flusk
Flusk este un exemplu pe care îl puteți utiliza pentru a crea aplicații mari Flask care includ SQLAlchemy, Docker și Nginx. Are o separare logică frumoasă pentru a crea backend, domeniu, vizualizări și modele în straturile lor respective.
Are o utilizare excelentă a Flask Blueprints și urmează modelul de proiectare din fabrică. Este ușor să creați extensii în Flusk și mai ușor să containerizați aplicația folosind Docker. Aruncați o privire la codul său sursă Aici .
Vas de bucătărie
Cookiecutter Flask este un șablon de flacon cu funcții precum gruparea activelor și reducerea cu pachete web. Are șabloane de pornire pentru înregistrarea / autentificarea utilizatorilor și este construit pe Bootstrap 4.
Cookiecutter este un utilitar din linia de comandă pentru a crea un proiect pachet Python. Înseamnă că, dacă utilizați acest șablon, puteți publica și aplicația dvs. Flask ca PyPI. Acest proiect este în curs de dezvoltare activă.
Merită evaluat la acest link .
Balonul plin
Flask full este încă un cazan plin de energie care folosește țelină, MongoEngine, semnale, comenzi Shell, WebSocket și eventlet. Este destul de bine integrat cu documente API Swagger și documente Sphinx.
Evaluează acest proiect ca sursă. Este disponibil gratuit Aici .
Flasky
Pentru a crea aplicații ușoare, vă recomandăm să luați în considerare Flasky. Codul sursă Flasky este disponibil Aici . Acest depozit a fost creat de Miguel Grinberg, care are peste 25 de ani de experiență în dezvoltarea web.
El a creat Flasky pentru a oferi exemple de cod pentru conceptele discutate în cartea sa numită Dezvoltare Web Flask .
Oricare ar fi, cadrul sau șablonul pe care îl alegeți, toate acestea au câteva caracteristici standard și vorbesc despre acestea în felul lor. Aici enumerăm câteva dintre aceste caracteristici și le discutăm și le implementăm pe cele care utilizează Flask-Appbuilder în aplicația noastră exemplificativă din această serie de tutoriale.
Acest tutorial discută câteva modele mai comune pe care le veți găsi în aproape toate aplicațiile web de astăzi și sunt plăcute să le aveți în kitul unui dezvoltator web.
Exemplu de autentificare în balon
O aplicație web solicită de obicei Utilizatorilor să se înregistreze și să acceseze partea restricționată a aplicației pe baza privilegiilor atribuite. Utilizatorii au roluri bazate pe permisiuni. De exemplu, un utilizator public nu are permisiunea de a crea un alt utilizator. Cu toate acestea, un utilizator de administrator are aceste permisiuni.
Uneori, aplicațiile web automatizează înregistrarea și crearea utilizatorilor prin atribuirea acestora a permisiunilor implicite sau predefinite.
Creați utilizator offline
Să creăm un utilizator folosind comanda flask fab create-user. După ce utilizați această comandă, veți primi solicitări din linia de comandă pentru a oferi detaliile contului de utilizator. Oferiți detalii similare cu cele prezentate mai jos, iar utilizatorul dvs. este creat.
Role (Public): Username: user1 User first name: User1 User last name: Last1 Email: user1@sthwebsite.com Password: Repeat for confirmation: ## various logs 2020-06-21 13:55:01,053:INFO:flask_appbuilder.security.sqla.manager:Added user user1 User user1 created.
Observați că la sfârșitul ieșirii comenzii, sqla.manager tipărește mesaje de confirmare pentru crearea utilizatorului.
Acum accesați aplicația și conectați-vă cu detaliile pe care tocmai le-ați introdus. Dacă ați creat utilizatorul în baza de date de producție, transmiteți aceste detalii persoanei pentru care ați creat acest cont.
Navigați la http: // localhost: 8080 / login și veți vedea formularul de autentificare așa cum se arată mai jos.

Odată ce utilizatorul1 se conectează, utilizatorul poate vedea mesajul de întâmpinare.

Creați utilizator online
Ar putea fi imposibil pentru noi să creăm toți utilizatorii offline. Mai mult decât atât, ar putea necesita mai multă expertiză tehnică pentru a utiliza comanda fab-flask fab create-user în mediul de producție. S-ar putea să aveți obligația de a elimina o parte din sarcina de lucru de la un administrator, care este însărcinat de cele mai multe ori cu crearea utilizatorului.
Prin urmare, în exemplul nostru de aplicație web, să permitem utilizatorilor să se înregistreze singuri.
Folosim serviciul reCAPTCHA Google pentru a împiedica actorii rău intenționați să acceseze părțile restricționate ale aplicației.
Mai întâi, să înregistrăm domeniul nostru pe serviciul Google reCAPTCHA și să dobândim cheia SITE și cheia SECRET.
Pasul 1: Instalați Flask-Mail folosind comanda de mai jos.
pip install Flask-Mail
Accesați https://www.google.com/recaptcha/intro/v3.html și conectați-vă ca administrator folosind Contul dvs. Google.
Pasul 2: Alegeți tipul de reCaptcha.

Pasul 3: indicați domeniul pentru care doriți să utilizați reCaptcha de la Google.
De asemenea, adăugați localhost în lista de domenii permise pentru această cheie și acceptați termenii și trimiteți-i. Puteți să o eliminați mai târziu după dezvoltarea acestei caracteristici.
Pasul 4: Notați cheia de site, cunoscută și sub numele de cheie publică.

Pasul 5: Notați cheia SECRETĂ, cunoscută și sub numele de cheie privată.

Odată ce notați tastele așa cum s-a menționat mai sus, este mai bine să le stocați într-un loc unde acestea pot fi trimise și citite în config. Pentru acest tutorial, am salvat valorile ca variabile de mediu ca SITE_KEY și SECRET_KEY.
Acum deschideți config.py și actualizați-l așa cum se arată mai jos.
# Will allow user self registration AUTH_USER_REGISTRATION = True# The default user self registration role AUTH_USER_REGISTRATION_ROLE = 'Public'# Config for Flask-WTF Recaptcha necessary for user registration RECAPTCHA_PUBLIC_KEY = os.environ.get('SITE_KEY', None) RECAPTCHA_PRIVATE_KEY = os.environ.get('SECRET_KEY', None) # Config for Flask-Mail necessary for user registration MAIL_PORT = 587 MAIL_USE_SSL = False MAIL_SERVER = 'smtp.gmail.com' MAIL_USE_TLS = True MAIL_USERNAME = 'sthtestmail@gmail.com' MAIL_PASSWORD = 'Passw0rdqwerty' MAIL_DEFAULT_SENDER = 'sthtestmail0@gmail.com'
Este posibil să trebuiască să activați accesul mai puțin sigur la Contul dvs. Google. Activați accesul la cont la adresele URL de mai jos dacă vă blocați în orice problemă legată de e-mail.

- https://accounts.google.com/DisplayUnlockCaptcha
- https://support.google.com/mail/?p=BadCredentials
Acum, pe pagina de autentificare, putem vedea un buton suplimentar de înregistrare a utilizatorului. După ce faceți clic pe înregistrare, putem vedea multe câmpuri împreună cu reCaptcha Challenge.

Odată ce vă înregistrați cu e-mailul și treceți provocarea reCaptcha, veți vedea un mesaj de confirmare, așa cum se arată mai jos.

Dacă e-mailul pe care l-ați dat în timpul înregistrării este valid, atunci veți primi e-mailul de activare a contului similar cu cel afișat în imaginea de mai jos.

Administrator Flask
Dacă ați citit celelalte tutoriale din această serie de tutoriale Flask, veți observa că am beneficiat de securitatea încorporată care vine cu Flask-Appbuilder. Vizualizările pe care le-am adăugat folosind add_view_no_menu nu sunt protejate. Cu toate acestea, vizualizările pe care le-am adăugat pe baza modelelor de date sunt protejate automat pentru un utilizator de administrator.
Alternativ, am putea folosi Flask-Admin, care în mare parte ar fi obținut un rezultat similar. Și Flask-Admin, să definim vizualizările într-o manieră orientată pe obiecte. O pagină web de pe frontend reprezintă o metodă pe o clasă de vizualizare pe care o adăugăm în mod explicit la interfață.
În acest tutorial, nu folosim Flask-Admin. În schimb, luăm calea de a obține aceleași rezultate cu mai multă viteză și să omitem necesitatea de a ști despre construirea de securitate în jurul autentificării, autentificărilor, rolurilor și permisiunilor. A fost posibil, deoarece am folosit Flask-Appbuilder.
Atât Flask-Appbuilder, cât și Flask-Admin au argumentele pro și contra. În cazul Flask-Admin, trebuie să știm că nu există ipoteze de securitate existente și puteți crea aplicații pe baza modelului dvs. de securitate. Pentru a afla mai multe despre Flask-Admin, vă rugăm să vizitați Aici și treceți prin exemple potrivite.
Încărcare fișier flask
Aproape toate aplicațiile web din zilele noastre au cerințele de stocare și servire a fișierelor. Un tipar tipic pentru aceștia este salvarea fișierelor pe o cale de pe server, cu câteva informații pentru a efectua operațiunea pe fișierul stocat și păstrarea în Modele de aplicații și vizualizări.
Vom lucra la un exemplu similar. Să modificăm modelul nostru de melodie cu funcții suplimentare.
În fișierul models.py introduceți următorul cod.
from flask import Markup, url_for from flask_appbuilder.models.mixins import FileColumn from flask_appbuilder.filemanager import get_file_original_name from flask_appbuilder import Model from sqlalchemy import Column, Integer, String, ForeignKey from sqlalchemy.orm import relationship class Song(Model): id = Column(Integer, primary_key=True) title = Column(String(200), nullable=False) rating = Column(Integer) album_id = Column(Integer, ForeignKey('album.id')) # for storing MP3 file of the song song_file = Column(FileColumn, nullable=False) album = relationship('Album') def __str__(self): return self.title def download(self): return Markup( ' Download ' ) def file_name(self): return get_file_original_name(str(self.song_file))
Am modificat modelul de melodie creat anterior adăugând o nouă coloană de tip FileColumn. Mai mult, am adăugat încă două coloane care vor fi adăugate la SongsView pentru a afișa numele fișierului și un link pentru a descărca fișierul încărcat.
Metoda Flask url_for a fost utilizată împreună cu Markup pentru a afișa descărcarea ca link. De asemenea, am folosit metoda get_file_original_name din Flask-Appbuilder, deoarece numele fișierului este stocat concatenându-l cu un UUID pentru a evita coliziunile între aceleași nume de fișiere.
Modificați views.py cu codul de mai jos pentru a actualiza SongsView corespunzător.
class SongsView(ModelView): datamodel = SQLAInterface(Song) label_columns = {'file_name' : 'File Name', 'download': 'Download'} list_columns = ('title', 'file_name', 'download') show_columns = ('title', 'file_name', 'download')
În clasa SongsView, am menționat noile etichete care trebuie afișate și dorim să listăm doar coloanele menționate în lista specificată.
Aici trebuie să vă amintiți că am modificat un model de bază de date prin adăugarea unei coloane la model. Tabelul corespunzător din baza de date nu are această nouă coloană. Prin urmare, vom elimina fișierul app.db, deoarece lucrăm la baza de date SQLite de la ultimul tutorial.
Alternativ, am putea folosi și comanda flask db migrate și să facem modificările necesare fișierului versiune și să folosim upgrade-ul flask db pentru a actualiza tabelul. Cu toate acestea, modificarea pe care am introdus-o este minimă și putem recrea baza de date a aplicației și Utilizatorul.
Vă recomandăm ca, în producție, să luați în considerare utilizarea comenzilor Flask-Migrate ori de câte ori aduceți modificări Schemei de baze de date a aplicației dvs.
Utilizați comenzile de mai jos pentru a elimina fișierul bazei de date și a crea din nou utilizatorul administrator.
rm app.db flask fab create-db flask fab create-admin
Acum conectați-vă la aplicație cu acreditările de administrator și veți vedea SongsView modificat așa cum se arată în imaginea de mai jos.

Adăugați o melodie cu un fișier.

Odată ce salvați fișierul, coloanele din Vizualizare vor arăta așa cum se arată mai jos.

Observați următoarele valori în config.py. Fișierele încărcate vor fi stocate pe această cale pe server. Pentru acest tutorial, acesta va fi încărcat pe mașina pe care dezvoltăm acest exemplu de aplicație.
Verificați calea de încărcare, așa cum se menționează în config.py. Fișierele sunt stocate cu UUID-urile, așa cum se arată mai jos.

Balon HTTPS
În ceea ce privește dezvoltarea, putem continua să rulăm aplicația Flask fără HTTPS. Din punct de vedere al securității, HTTPS se asigură că comunicarea are loc între Client legitim și Server.
Această comunicare criptată necesită stabilirea încrederii între un client și un server, utilizând un certificat semnat de CA cu o pereche de chei publice și private. Vă rugăm să citiți mai multe despre asta Aici
În acest tutorial, vă vom informa despre metodele de a dezvolta site-uri web bazate pe Flask folosind HTTP-uri în timpul dezvoltării.
Cel mai rapid și mai ușor mod de a include HTTPS în timpul dezvoltării este de a utiliza un ssl_context adhoc, așa cum se menționează mai jos în run.py. Cu toate acestea, vă rugăm să instalați pyopenssl folosind pip în mediu.
app.run(host='0.0.0.0', port=8080, debug=True, ssl_context='adhoc')
După adăugarea ssl_context, când navigați la https: // localhost: 8080 /, veți primi un avertisment care va ridica îndoieli cu privire la validitatea certificatului utilizat în această comunicare. Mai mult, navigarea către http: // localhost: 8080 / nu va mai funcționa.
Astfel, această abordare este un pic greoaie și vă va cere să continuați să acceptați această solicitare ori de câte ori reporniți serverul de dezvoltare.
Trebuie să faceți clic pe acces nesigur pentru a continua să lucrați, așa cum se arată mai jos.

Alternativ, pentru a ne dezvolta cu caracteristicile https, putem trece calea către certificat și să introducem un tuplu Python către parametrul ssl_context din metoda de rulare. Cu toate acestea, pentru a adopta această abordare, va trebui să generați un certificat autosemnat și o cheie utilizând comanda de mai jos.
openssl req -x509 -newkey rsa:4096 -nodes -out mycert.pem -keyout mykey.pem -days 365
Oferiți valori adecvate pentru interogările solicitate.

Am lăsat toate valorile implicite. Acum opriți serverul de dezvoltare și treceți certificatul de cale și calea cheii așa cum se arată mai jos.
app.run(host='0.0.0.0', port=8080, debug=True, ssl_context=('mycert.pem', 'mykey.pem'))
Această abordare este, de asemenea, similară cu metoda anterioară de utilizare a Adhoc ssl_context. Cu toate acestea, în acest caz, detaliile persistă mai mult timp. Am menționat 365 de zile. Puteți specifica expirarea în zilele de care aveți nevoie. Mai mult, aceste fișiere pot fi partajate cu ceilalți membri ai echipei dacă vă dezvoltați într-o echipă.
În mediul de producție, certificatele sunt emise de CA, iar Miguel Grinberg discută câteva cazuri de utilizare Aici . Vă recomandăm să citiți mai multe detalii pe pagina respectivă.
Concluzie
În acest tutorial, am discutat câteva modele pe care dezvoltatorii web le urmăresc în timp ce dezvoltăm caracteristici legate de Autentificare Flask, Administrator Flask, Încărcare fișier Flask și Flask HTTPS. Am oferit exemple de cod, iar cititorii pot încerca și asta.
În următorul nostru tutorial, vom acoperi conceptele de extindere a Flask-ului și vom vedea cum să creați caracteristici bazate pe API REST. Mai mult, vom discuta despre modul în care putem utiliza Twitter API în interiorul Flask.
protocoale utilizate în fiecare strat de model osi
=> Explorați aici seria de antrenament Flask
Lectură recomandată
- Modele de proiectare în Java: Singleton, Factory și Builder
- Tutorial Python Flask - Introducere în Flask pentru începători
- Tutorial API Flask cu exemplu | Extinderea balonului cu API-uri
- Aplicația Flask și aspectul proiectului Flask cu Blueprint & Bootstrap
- Django Vs Flask Vs Node: Ce cadru să selectați
- Top 31 Întrebări populare de interviu Python Flask cu răspunsuri
- Top 10 instrumente de proiectare a bazelor de date pentru a construi modele de date complexe
- Top 11 tendințe de design UI / UX: la ce să ne așteptăm în 2021 și dincolo