Top 13 cadre web Python de învățat în 2020

Cadrele fac viața dezvoltatorilor mai ușoară, oferindu-le o structură pentru dezvoltarea aplicațiilor. Acestea automatizează implementarea soluțiilor comune, reducând timpul de dezvoltare și permițându-le dezvoltatorilor să se concentreze pe logica aplicației în loc de elementele de rutină.

În acest articol, împărtășim o listă cu cele mai bune douăsprezece cadre web Python care vă vor fi utile în drumul dvs. pentru a deveni un dezvoltator backend profesionist și pentru a vă îmbunătăți setul de abilități existente.

De ce cadre Python? Stack Overflow a publicat recent rezultatele sondajului lor anual pentru dezvoltatori pentru 2019, care a declarat Python ca fiind limbajul de programare major cu cea mai rapidă creștere.

sursa: stackoverflow.blog

De departe, cele mai populare framework-uri Python sunt Django și Flask. Dar asta nu înseamnă că ar trebui să ignorați potențialul altor cadre. Fiecare dintre ele posedă caracteristici care ar putea fi o potrivire perfectă pentru proiectul dvs. web.

sursa: jetbrains.com

Rețineți că framework-urile Python despre care vom vorbi aici nu sunt listate într-o anumită ordine: ne-am concentrat pe a vă arăta ce puteți face, spre deosebire de a vă spune ce ar trebui să faceți.

Câteva lucruri de luat în considerare

Pentru început, atunci când decideți ce framework să folosiți, uitați-vă la dimensiunea și complexitatea proiectului dumneavoastră. Dacă ceea ce doriți să dezvoltați este un sistem mare, plin de caracteristici și cerințe, un framework full-stack ar putea fi alegerea potrivită. Dacă aplicația dvs. este pe partea mai mică și mai simplă, ar trebui probabil să luați în considerare un microframework.

În al doilea rând, trebuie să verificați dacă framework-ul pe care îl luați în considerare poate scala pe verticală și orizontală. Aceasta este o necesitate pentru proiectele care urmează să ruleze pe mai multe servere, să gestioneze cantități uriașe de trafic și să susțină adăugarea de noi caracteristici pentru a îmbunătăți funcționalitatea.

După ce ați ales un framework, contactați o echipă de dezvoltatori și cereți-le informații despre costul estimat pentru dezvoltarea aplicației dumneavoastră.

Puteți găsi informații despre tipul și accentul unor framework-uri aici. O decizie finală, totuși, ar trebui să vină din propria înțelegere a proiectului dvs. și a sarcinilor pe care doriți să le simplificați.

Cu toate acestea, cadrele pot, de asemenea, să stea în calea dezvoltării. Atunci când alegeți un framework full-stack, adesea semnați pentru un set de limitări. Desigur, puteți găsi modalități de a le ocoli, dar aveți grijă să nu petreceți mai mult timp luptând pentru propria libertate decât ați fi scris o aplicație în Python pur.

Cadrele full-stack

Un cadru full-stack sau un cadru de întreprindere este o soluție all-in-one cu biblioteci configurate pentru a lucra împreună fără probleme. Acesta susține dezvoltarea de servicii backend, interfețe frontend și baze de date. Un cadru full-stack oferă tot ceea ce are nevoie un dezvoltator pentru construirea unei aplicații. Python oferă mai mult de un cadru full-stack.

Django

Site-ul oficial | GitHub | PyPI | Awesome

GitHub Stars: 44,077 | GitHub Forks: 18,949

Django este un framework Python gratuit și open-source full-stack. Încearcă să includă toate caracteristicile necesare în mod implicit, spre deosebire de a le oferi ca biblioteci separate.

Câteva dintre caracteristicile exemplare ale Django sunt autentificarea, rutarea URL-urilor, motorul de șabloane, maparea obiect-relațională (ORM) și migrarea schemelor bazelor de date (Django v.1.7+).

Aceste caracteristici fac ca Django să fie foarte scalabil, ridicol de rapid și extrem de versatil.

Django folosește ORM-ul său pentru a mapa obiectele în tabelele bazelor de date. Același cod funcționează cu diferite baze de date și nu este dificil de transferat de la o bază de date la alta. Principalele baze de date cu care lucrează Django sunt PostgreSQL, MySQL, SQLite și Oracle, dar driverele de la terți vă permit să folosiți și altele.

Cu Django, puteți crea orice aplicație web, de la proiecte la scară mică la site-uri web complexe. Datorită flexibilității sale, Django este, de asemenea, utilizat pentru crearea de MVP-uri, permițând startup-urilor să își optimizeze timpul și bugetul.

Se așteaptă ca baza de utilizatori a lui Django să crească, deoarece mulți dezvoltatori văd acest framework ca fiind cea mai bună alegere pentru tehnologiile emergente, cum ar fi învățarea automată. De asemenea, în 2020, comunitatea Django plănuiește să lanseze mai multe biblioteci pentru a răspunde cererii în creștere.

Aici, la SteelKiwi, folosim Django ca principal framework pentru dezvoltarea backend. Dacă doriți să vedeți aplicațiile uimitoare pe care le-am dezvoltat deja cu Django, vizitați pagina noastră de proiecte.

Pyramid

Site-ul oficial | GitHub | PyPI | Awesome

GitHub Stars: 3.215 | GitHub Forks: 866

Pyramid este un framework de aplicații web open-source – și al doilea remarcabil – bazat pe Python. Scopul său este de a face cât mai multe lucruri cu o complexitate minimă. Funcționând pe Python 3, Pyramid ține pasul cu îmbunătățirile tehnologice. Pyramid 1.10 este versiunea actuală a framework-ului și este a zecea actualizare din 2010.

Cele mai izbitoare caracteristică a Pyramid este capacitatea sa de a funcționa bine atât cu aplicații mici, cât și cu aplicații mari. Unele dintre caracteristicile deosebite ale Pyramid includ:

  • Aplicații cu un singur fișier
  • Generarea de URL-uri
  • Configurație extensibilă
  • Specificații de template-uri și de active
  • Autentificare și autorizare flexibile
  • Testare, suport, și documentație cuprinzătoare a datelor
  • Predicte de vizualizare și multe vizualizări per rută
  • Decoratori de funcții
  • Predicte
  • Rendereri

Cu Pyramid, un dezvoltator poate decide asupra limbajului de modelare, bibliotecilor de generare și a stratului de bază de date.

Comunitatea Pyramid este activă și se mândrește cu numeroase versiuni. Dezvoltatorii pot urmări progresul framework-ului alăturându-se canalului IRC oficial sau alăturându-se grupurilor Google și Twitter.

TurboGears

Site-ul oficial | GitHub | PyPI

GitHub Stars: 654 | GitHub Forks: 65

TurboGears este un cadru de aplicații web full-stack open-source, orientat pe date. Este construit pe o mulțime de middleware și multe biblioteci și a fost inițial creat pentru a combina cele mai bune componente ale altor cadre Python.

TurboGears vă permite să dezvoltați rapid aplicații web extensibile bazate pe date. Vine cu un motor de modelare ușor de utilizat și un ORM puternic și flexibil. În plus față de sistemele de șabloane grozave care ușurează viața proiectanților, TurboGears oferă multă flexibilitate, suport puternic pentru agregate, un ORM puternic și fragmente reutilizabile.

Câteva dintre caracteristicile distinctive ale TurboGears includ:

  • Suport pentru mai multe baze de date
  • Arhitectură de tip MVC
  • Suport pentru SQLObject și SQLAlchemy
  • Kid și Genshi incluse în limbajele de modelare preferate
  • Validare cu FormEncode
  • Pylons ca server web
  • ToscaWidgets, o bibliotecă de aplicații care simplifică coordonarea proiectării front-end și a dezvoltării serverului
  • Șabloane PasteScript
  • Servere frontale bazate pe WSGI (serverul HTTP Paste, serverul CherryPy WSGI/HTTP, etc.)
  • Instrumente de linie de comandă
  • Integrarea bibliotecii JavaScript MochiKit
  • Toate caracteristicile implementate ca decoratori de funcții

În ceea ce privește viitorul TurboGears, comunitatea lucrează în prezent la îmbunătățirea capacităților cadrului și a stabilității generale și sunt pe cale să lanseze „codul minimal”. Acest cod este denumit, de asemenea, un microframework, sau o versiune redusă a TurboGears. Codul minimal va ajuta dezvoltatorii să construiască aplicații mai rapid, economisind bani și timp.

Web2py

Site-ul oficial | GitHub | PyPI

GitHub Stars: 1,794 | GitHub Forks: 818

Web2py este un framework Python full-stack open-source scalabil. Este foarte puternic când vine vorba de manipularea datelor. Web2py a fost inițial oferit ca un instrument de predare, cu accent pe ușurința de utilizare. Acest lucru explică de ce nu există fișiere de configurare la nivel de proiect.

Ceea ce este grozav la Web2py, totuși, este că vine cu propriul IDE bazat pe web care, printre altele, include un editor de cod, un depanator și o implementare cu un singur clic.

Alte caracteristici valoroase ale Web2py includ:

  • Nicio cerință pentru instalare și configurare
  • Capacitatea de a rula pe Windows, Mac, Linux/Unix, Google App Engine, Amazon EC2 și orice găzduire web care suportă fie Python 2.5-2.7 sau Java+Python
  • Capacitatea de citire a mai multor protocoale
  • Securitatea datelor care previne vulnerabilități precum scripting cross-site, defecte de injecție și execuție de fișiere malițioase
  • Utilizarea cu succes a practicilor de inginerie software, ceea ce face ca codul să fie ușor de citit și de întreținut
  • Dezvăluirea erorilor, jurnalizare amănunțită a erorilor și ticketing
  • Controlul accesului bazat pe roluri
  • Suport pentru internaționalizare
  • Compatibilitate retroactivă care asigură avansarea orientată către utilizator fără a fi nevoie să se piardă legăturile cu versiunile anterioare

Un sistem de ticketing este principala caracteristică a Web2py; acesta emite bilete ori de câte ori apar erori. În acest fel, utilizatorii pot urmări erorile și statusurile lor.

În ciuda tuturor acestor avantaje, comunitatea Web2py este mai mică decât cea a Pyramid sau Django. Nu sunt mulți dezvoltatori care îl folosesc. Acest lucru înseamnă că șansele de a primi suport sunt mai mici. În plus, lista oficială de discuții nu este foarte activă.

Microframeworks

Un microframework, sau un framework minimalist pentru aplicații web, nu dispune de majoritatea funcționalităților unui framework cu drepturi depline, cum ar fi un motor de șabloane web, funcționalitate de autentificare, conturi, autorizare, validare și igienizare a intrărilor. Un microframework încearcă să furnizeze doar setul de componente necesare pentru construirea unei aplicații. De asemenea, se poate concentra pe furnizarea funcționalității necesare pentru o anumită sferă.

Flask

Site-ul oficial | GitHub | PyPI | Awesome

Github Stars: 46,475 | GitHub Forks: 12,921

Flask este un framework Python disponibil sub licența BSD. A fost inspirat de cadrul Sinatra Ruby. Flask depinde de setul de instrumente Werkzeug WSGI și de șablonul Jinja2.

Ideea principală din spatele lui Flask este de a ajuta la construirea unei fundații solide pentru aplicații web. De acolo, puteți folosi orice extensii de care ați putea avea nevoie. Flask este ales pentru orice și pentru toate proiectele. De fapt, este o alegere implicită pentru orice proiect web care nu se potrivește cu Django.

Designul ușor și modular al lui Flask îl face ușor adaptabil la nevoile dezvoltatorilor. Acesta include o serie de caracteristici utile out-of-the-box:

  • Server de dezvoltare încorporat și un depanator rapid
  • Suport integrat pentru testarea unitară
  • RESTful request dispatching
  • Jinja2 templating
  • Suport cookie-uri securizate (sesiuni pe partea de client)
  • WSGI 1.0 compliance
  • Unicode-based
  • Capacitatea de a conecta orice ORM
  • Manipulare cereri HTTP

De la lansarea sa în 2010, Flask a fost actualizat de 27 de ori. Până în prezent, rămâne cel mai important framework Python în creștere. Cu toate acestea, multe extensii Flask nu mai sunt susținute: documentația este depășită și nu mai sunt dezvoltate. Dacă vă confruntați cu acest lucru, va trebui să căutați pe Google pentru a găsi o extensie susținută în mod activ cu funcționalitate similară.

Bottle

Site-ul oficial | GitHub | PyPI

GitHub Stars: 6,348 | GitHub Forks: 1.245

Bottle este un microframework. Destinat inițial pentru construirea de API-uri, Bottle implementează totul într-un singur fișier sursă. Nu are dependențe în afară de biblioteca standard Python. Codificarea cu Bottle vă aduce mai aproape de metal decât codificarea cu orice framework full-stack. Cu toate acestea, Bottle se potrivește doar dacă construiți o aplicație foarte mică, cu cel mult 500 de linii de cod și fără cerințe speciale.

Caracteristicile sale implicite includ rutare, modelare, utilități și o abstractizare de bază asupra standardului WSGI.

  • Rutare – suportă maparea cererilor pe apeluri de funcții, permițându-vă să obțineți URL-uri curate și dinamice
  • Șabloane – un motor de șabloane rapid și pythonic din fabrică, împreună cu suport complet pentru mako, jinja2 și cheetah
  • Utilități – acces confortabil la datele din formulare, încărcări de fișiere, cookie-uri, anteturi, și alte metadate legate de HTTP
  • Server – un server de dezvoltare HTTP încorporat care suportă fapws3, bjoern, GAE, СherryPy și orice alt server HTTP compatibil cu WSGI

Din 2009, Bottle a fost actualizat de 73 de ori, iar acum este o soluție perfectă pentru crearea de prototipuri, învățarea organizării cadrelor web și crearea de aplicații personale simple.

Toate contribuțiile la comunitatea Bottle sunt acceptate prin GitHub. De asemenea, utilizatorii se pot alătura listei de discuții și blogului Bottle și pot urmări cele mai recente modificări pe Twitter. Dacă sunteți în căutarea unui forum suplimentar pentru discuții, alăturați-vă unui chat freenode.

CherryPy

Site-ul oficial | GitHub | PyPI

GitHub Stars: 1,057 | GitHub Forks: 259

CherryPy este un framework web minimalist, cu sursă deschisă. Acesta face ca construirea de aplicații web Python să nu fie diferită de construirea oricărui alt program orientat pe obiecte.

CherryPy este creat pentru a fi extensibil. Cadrul oferă chiar și mecanisme pentru puncte de agățare și extensii. de exemplu, o aplicație web alimentată de CherryPy este o aplicație Python de sine stătătoare care încorporează propriul server web multi-threaded. Cu propriul server web, punctele de extensie includ funcții în afara ciclului cerere-răspuns, adăugând astfel la nivelul de extensibilitate al CherryPy.

De fapt, o aplicație web alimentată de CherryPy este o aplicație Python autonomă care încorporează propriul server web cu mai multe fire. Aplicațiile CherryPy rulează pe orice sistem de operare care suportă Python (Windows, macOS, Linux, etc.). Ele pot fi implementate oriunde puteți rula o aplicație Python obișnuită. Nu aveți nevoie de Apache pentru aplicațiile CherryPy, dar puteți rula o aplicație CherryPy în spatele Apache la fel de bine cum o puteți rula în spatele Lighttpd sau IIS.

CherryPy nu este un cadru foarte limitativ, deoarece vă permite să folosiți orice tip de tehnologie pentru template-uri, acces la date și așa mai departe. Cu toate acestea, este în continuare capabil să gestioneze sesiuni, statici, cookie-uri, încărcări de fișiere și tot ceea ce poate face în mod obișnuit un framework web.

Unele dintre caracteristicile implicite ale CherryPy includ:

  • Un HTTP/1.1-compliant WSGI thread-pooled webserver
  • Simplicitatea de a rula mai multe servere HTTP în același timp
  • Un sistem de configurare puternic
  • Un sistem flexibil de plugin-uri
  • Instrumente gata de utilizare pentru caching, codificare, sesiuni, autentificare, conținut static, etc.
  • Suport integrat pentru profilare, acoperire și testare
  • Capacitatea de a rula pe Python 2.7+, Python 3.1+, PyPy, Jython și Android

În ciuda tuturor caracteristicilor și avantajelor sale, mulți dezvoltatori consideră că documentația lui CherryPy ar putea fi îmbunătățită. În plus, CherryPy ar putea fi cel puțin un pic mai ușor de utilizat.

Ca majoritatea celorlalte framework-uri, CherryPy are în spate o comunitate care oferă asistență atât începătorilor, cât și dezvoltatorilor avansați. CherryPy are o listă de discuții și sugerează dezvoltatorilor să se alăture canalului IRC al framework-ului sau grupurilor Gitter și Google.

Falcon

Site-ul oficial | GitHub | PyPI

GitHub Stars: 1,057 | GitHub Forks: 259

Falcon este un framework API web Python bare-metal pentru construirea de backend-uri de aplicații foarte rapide. Logo-ul cadrului este un șoim, simbolizând rapiditatea cu care Falcon lucrează.

Acest cadru permite dezvoltatorilor să creeze proiecte mai curate și gestionează majoritatea cererilor. Falcon nu restricționează niciodată dezvoltatorii în alegerea bibliotecilor pentru baze de date și autorizare.

Alte caracteristici Falcon valoroase:

  • 100% acoperire a codului cu o suită de teste cuprinzătoare
  • O bază de cod foarte optimizată
  • Manipulare frontală a excepțiilor
  • REST-.clase de resurse inspirate de REST
    • Șabloane URI pentru rutine intuitive
    • Acces ușor prin clase de cerere și răspuns
    • Procesare simplă a cererilor prin middleware componente
      • Răspunsuri de eroare HTTP automate
      • Testarea unitară prin intermediul ajutoarelor WSGI

      Falcon ignoră operațiile inutile în timpul dezvoltării unui cadru web. De asemenea, oferă libertate de alegere: dezvoltatorii pot lua decizii care îi vor ajuta să ajusteze și să personalizeze liber implementările.

      Încă două avantaje care merită menționate sunt disponibilitatea unei documentații extinse și o comunitate activă.

      Hug

      Site-ul oficial | GitHub | PyPI

      GitHub Stars: 5,905 | GitHub Forks: 347

      Hug este un cadru de dezvoltare API Python 3. Este creat pentru a permite inginerilor de software să dezvolte o API o singură dată și apoi să o refolosească ori de câte ori este nevoie. Cadrul Hug simplifică dezvoltarea API-urilor prin oferirea de diverse interfețe. Acesta este principalul motiv pentru care acest cadru este numit unul dintre cele mai rapide din Python 3.

      Caracteristicile cheie ale Hug:

      • Suport pentru documentație automată
      • Validare alimentată de notații
      • Gestionare integrată a versiunilor
      • Conformitate cu Cython
      • Poate fi folosită ca o bibliotecă Python

      Cadrul Hug conține cât mai puține integrări și cât mai puțin cod posibil, rămânând funcțional și oferind performanțe deosebite. În plus, comunitatea Hug este în prezent în creștere. Acesta este un semn al cererii cadrului și o dovadă că, ori de câte ori apare o problemă, un dezvoltator poate găsi ajutor.

      FastAPI

      Site-ul oficial |GitHub |PyPI

      GitHub Stars: 4,835| GitHub Forks: 256

      FastAPI este un framework modern bazat pe Python. Acesta a fost conceput inițial pentru a fi ușor de utilizat pentru a asigura cea mai bună experiență de dezvoltare. Până în prezent, FastAPI este unul dintre cele mai rapide cadre pentru construirea de API-uri cu Python 3.6+.

      Cadrul a preluat mai multe caracteristici de la Flask, inclusiv simplitatea sa. Întregul cadru este construit pe Starlette și include majoritatea caracteristicilor sale (șabloane, WebSockets și suport GraphQL).

      Cadrul FastAPI oferă:

      • Creșterea vitezei de dezvoltare cu 200% până la 300%
      • Reducerea erorilor cu 40%
      • Minimizarea timpului de depanare
      • Minimizarea duplicării codului
      • Documentare interactivă automată

      FastAPI nu este strâns legată de nicio bază de date. Cu toate acestea, acceptă bazele de date de care aveți nevoie. Cu FastAPI, sunteți liber să vă structurați proiectul așa cum aveți nevoie și chiar să folosiți majoritatea acelorași fișiere dintr-unul din proiectele Flask.

      Singurul dezavantaj este comunitatea sa mică. Dar aceasta se datorează faptului că FastAPI este un cadru relativ nou.

      Cadre asincrone

      Un cadru asincron este un tip relativ recent de cadru Python. Este un microframework care permite dezvoltatorilor să gestioneze un set mare de conexiuni concurente. Cadrele asincrone folosesc socket-uri care nu blochează și se alimentează din biblioteca asyncio a lui Python.

      Sanic

      Site-ul oficial | GitHub | PyPI

      GitHub Stars: 12,780 | GitHub Forks: 1,203

      Sanic este un framework web Python construit pe uvloop și creat special pentru răspunsuri HTTP rapide prin gestionarea asincronă a cererilor.

      Funcționează pe Python 3.5+. Sanic suportă gestionari de cereri asincrone, ceea ce îl face compatibil cu funcțiile async/await din Python 3.5. Acest lucru îi sporește viteza, oferind capabilități non-blocante.

      Sonic este considerat cadrul asincron preferat în lumea Python datorită rutării, middleware-ului, cookie-urilor, versionării, fișierelor statice, blueprints, vizualizărilor bazate pe clase și socket-urilor. Cu toate acestea, nu oferă suport pentru baze de date și template-uri.

      Într-un test de referință cu un proces și 100 de conexiuni, Sanic a fost capabil să gestioneze 33.342 de cereri pe secundă, cu o latență medie de 2,96 ms.

      Tornado

      Site-ul oficial | GitHub | PyPI

      GitHub Stars: 18.292 | GitHub Forks: 5,040

      Tornado este un framework web Python și o bibliotecă de rețea asincronă care se concentrează pe viteză și pe capacitatea de a gestiona volume mari de trafic. Folosește o I/O de rețea care nu blochează și rezolvă problema C10k (ceea ce înseamnă că, dacă este configurată corespunzător, poate gestiona peste 10.000 de conexiuni concurente).

      Acest lucru o face un instrument excelent pentru construirea de aplicații care necesită performanțe ridicate și zeci de mii de utilizatori concurenți.

      Principalele caracteristici ale lui Tornado sunt:

      • Suport încorporat pentru autentificarea utilizatorilor
      • Servicii în timp real
      • Performanță de înaltă calitate
      • Limbaj de modelare web bazat pe Python
      • Client HTTP fără blocare
      • Implementarea schemelor de autentificare și autorizare de la terți (Google OpenID/OAuth, Facebook Login, Yahoo BBAuth, FriendFeed OpenID/OAuth, Twitter OAuth)
      • Suport pentru traducere și localizare

      În termeni de popularitate, Tornado se situează undeva între Django și Flask. Să spunem că doriți să scrieți ceva în Flask sau Django datorită caracteristicilor și instrumentelor lor, dar aveți nevoie și de o performanță mult mai bună. În acest caz, ar trebui să alegeți Tornado.

      Altele

      Dash

      Site-ul oficial | GitHub | PyPI | Awesome

      GitHub Stars: 9,856 | GitHub Forks: 1,011

      Dash este un framework Python open-source folosit pentru construirea de aplicații web analitice. Este deosebit de bun în special pentru cercetătorii de date Python care nu sunt foarte familiarizați cu dezvoltarea web.

      Există două beneficii de bază ale Dash:

      • Acesta vă permite să construiți aplicații foarte interactive folosind doar cod Python.
      • Acesta simplifică utilizarea puterii instrumentelor Python pentru manipularea datelor.

      Aplicațiile Dash sunt servere web care rulează Flask și comunică cu pachete JSON prin cereri HTTP. Frontend-ul lor redă componentele cu React.js.

      Aplicațiile dezvoltate cu Dash sunt redate în browserul web și pot fi implementate pe servere. Acest lucru înseamnă, de asemenea, că aplicațiile Dash sunt în mod inerent cross-platform și mobile-ready.

      Dezvoltatorii Dash au acces la instanța Flask de bază și la toate proprietățile sale configurabile. Pentru a extinde capabilitățile aplicațiilor Dash, dezvoltatorii pot utiliza, de asemenea, setul bogat de plugin-uri Flask.

      Alegerea unui framework web Python

      Cadrul potrivit ar putea fi tot ce aveți nevoie pentru a dezvolta un proiect de succes. Sperăm din tot sufletul că ați găsit un framework interesant în acest articol. Avem, de asemenea, un altul, cele mai bune 17 cadre web Python din 2017, dacă sunteți interesat să explorați mai multe opțiuni.

      Am fi încântați dacă ați vizita pagina noastră corporativă GitHub. Dezvoltatorii noștri SteelKiwi încearcă din greu să inoveze în lumea tehnologiei și cu cât mai mulți oameni se implică, cu atât mai bine.

      .

Lasă un răspuns

Adresa ta de email nu va fi publicată.