flask design patterns
Ovaj vodič objašnjava neke od uobičajenih obrazaca dizajna tikvice i najbolje prakse koje treba slijediti tijekom dizajniranja web aplikacija s primjerima:
Dizajn aplikacija važan je aspekt razvoja softvera. Neplanirani dizajn aplikacije rezultira nepremostivim tehničkim dugom. Stoga, kad god želimo prilagoditi svoju aplikaciju, u redu je isprobati vremenski provjerene uzorke dizajna.
Flask zajednica ima mnogo takvih primjera koji vas mogu nadahnuti i utjecati na vaše dizajnerske odluke kada želite isprobati nekoliko uzoraka za svoju aplikaciju. Flask je toliko nepinioniran i fleksibilan da biste možda željeli kombinirati koncepte iz postojećih uzoraka i stvoriti novi.
=> Posjetite ovdje da biste naučili tikvicu od nule
Što ćete naučiti:
Uzorci dizajna tikvica
Na primjer, Naći ćete mnogo primjera od MVC uzorka do Jednostraničnih aplikacija do SAAS uzorka. Vi imenujete dizajnersku paradigmu, a nju je već isprobao netko iz zajednice i dostupna vam je besplatno.
U nastavku je navedeno nekoliko spremišta koja vrijedi pogledati.
Flusk
Flusk je primjer koji možete koristiti za stvaranje velikih aplikacija za Flask koje uključuju SQLAlchemy, Docker i Nginx. Ima prekrasno logičko razdvajanje za stvaranje pozadine, domene, pogleda i modela u njihove odgovarajuće slojeve.
Izvrsno koristi nacrte tikvica i slijedi tvornički obrazac dizajna. Lako je stvoriti proširenja u Flusku, a dodatno je lako sadržavati aplikaciju pomoću Dockera. Pogledajte izvorni kod ovdje .
Čuturica za kolačiće
Cookiecutter Flask predložak je tikvice sa značajkama kao što su grupiranje imovine i minifikacija s web-paketima. Ima početne predloške za registraciju / autentifikaciju korisnika, a izgrađen je na Bootstrapu 4.
Cookiecutter je uslužni program naredbenog retka za stvaranje projekta paketa Python. To znači da ako koristite ovaj predložak, svoju aplikaciju Flask možete objaviti i kao PyPI. Ovaj se projekt aktivno razvija.
Vrijedno je procijeniti na ovaj link .
Tikvica puna
Flask full je još jedan napajan kotao koji koristi Celery, MongoEngine, Signals, Shell naredbe, WebSocket i eventlet. Prilično je dobro integriran s dokumentima Swagger API i Sphinx.
Procijenite ovaj projekt kao izvor. Slobodno je dostupan ovdje .
Mrzovoljno
Za stvaranje laganih aplikacija, možda biste trebali uzeti u obzir Flasky. Dostupan je Flaskyjev izvorni kod ovdje . Ovo je spremište stvorio Miguel Grinberg, koji ima preko 25 godina iskustva u web razvoju.
Stvorio je Flaskyja kako bi pružio primjere koda za koncepte o kojima se govori u njegovoj knjizi Izrada internetskih tikvica .
Koji god okvir, okvir ili predložak odabrali, svi oni imaju neke standardne značajke i razgovaraju o njima na svoj način. Ovdje ćemo navesti neke od tih značajki i raspraviti o njima te implementirati one koji koriste Flask-Appbuilder u našem uzorku primjene ove serije tutorijala.
Ovaj vodič govori o nekim uobičajenijim uzorcima koje ćete pronaći u gotovo svim web aplikacijama danas i koje je lijepo imati u kompletu web programera.
Primjer prijave za tikvicu
Web aplikacija obično zahtijeva od korisnika da se registriraju i pristupe ograničenom dijelu aplikacije na temelju dodijeljenih privilegija. Korisnici imaju uloge temeljene na dopuštenjima. Na primjer, javni korisnik nema dopuštenje za stvaranje drugog korisnika. Međutim, administrator ima ta dopuštenja.
Web-aplikacije ponekad automatiziraju registraciju i stvaranje korisnika dodjeljivanjem zadanih ili unaprijed definiranih dozvola.
Stvori korisnika izvan mreže
Stvorimo korisnika pomoću naredbe fab create-user tikvice. Jednom kada upotrijebite ovu naredbu, dobit ćete upute naredbenog retka za detalje korisničkog računa. Dajte detalje slične onima prikazanim u nastavku i vaš će korisnik biti stvoren.
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.
Primijetite da na kraju izlaza naredbe sqla.manager ispisuje poruke potvrde za izradu korisnika.
Sada pristupite aplikaciji i prijavite se s detaljima koje ste upravo unijeli. Ako ste stvorili korisnika u produkcijskoj bazi podataka, proslijedite te detalje osobi za koju ste stvorili ovaj račun.
Idite na http: // localhost: 8080 / login i vidjet ćete obrazac za prijavu kao što je prikazano u nastavku.

Nakon što se korisnik1 prijavi, Korisnik može vidjeti poruku dobrodošlice.

Stvorite korisnika na mreži
Možda će nam biti nemoguće stvoriti sve korisnike izvan mreže. Štoviše, moglo bi vam trebati više tehničke stručnosti za upotrebu naredbe fab create-user tikvice u proizvodnom okruženju. Možda ćete dobiti zahtjev za uklanjanjem nekog radnog opterećenja od administratora koji je većinu vremena zadužen za izradu korisnika.
Stoga, u našem primjeru web aplikacije, dopustimo korisnicima da se sami registriraju.
Koristimo Googleovu uslugu reCAPTCHA kako bismo spriječili zlonamjerne aktere da pristupe ograničenim dijelovima aplikacije.
Prvo registrirajmo svoju domenu na Googleovoj usluzi reCAPTCHA i nabavimo ključ SITE i SECRET.
Korak 1: Instalirajte Flask-Mail pomoću naredbe u nastavku.
pip install Flask-Mail
Idite na https://www.google.com/recaptcha/intro/v3.html i prijavite se kao Administrator pomoću svog Google računa.
Korak 2: Odaberite vrstu reCaptcha.

Korak 3: Dajte domenu za koju želite koristiti Googleovu reCaptcha.
razlika između alfa testiranja i beta testiranja
Također dodajte localhost na popis dopuštenih domena za ovaj ključ i prihvatite uvjete i pošaljite ih. Možete ga ukloniti kasnije nakon razvoja ove značajke.
Korak 4: Zabilježite KLJUČ SITE, koji je poznat i kao javni ključ.

Korak 5: Zabilježite TAJNI KLJUČ koji je poznat i kao privatni ključ.

Jednom kada zabilježite tipke kao što je gore spomenuto, najbolje je pohraniti ih na mjesto gdje se mogu uputiti i pročitati u konfiguraciji. Za ovaj smo vodič vrijednosti spremili kao varijable okruženja kao SITE_KEY i SECRET_KEY.
Sada otvorite config.py i ažurirajte ga kako je prikazano u nastavku.
# 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'
Možda ćete morati omogućiti manje siguran pristup svom Google računu. Omogućite pristup računu na URL-ovima u nastavku ako zapnete u bilo kakvim problemima povezanim s e-poštom.

- https://accounts.google.com/DisplayUnlockCaptcha
- https://support.google.com/mail/?p=BadCredentials
Sada na stranici za prijavu možemo vidjeti dodatni gumb za registraciju korisnika. Jednom kada kliknete na registraciju, vidjet ćemo mnoga polja zajedno s reCaptcha izazovom.

Nakon što se registrirate s e-poštom i prođete izazov reCaptcha, vidjet ćete poruku potvrde, kao što je prikazano u nastavku.

Ako je e-adresa koju ste dali tijekom registracije valjana, tada ćete primiti e-poštu za aktivaciju računa sličnu onoj prikazanoj na donjoj slici.

Administrator tikvice
Ako ste pročitali ostale vodiče iz ove serije tutorijala za Flask, primijetit ćete da smo iskoristili ugrađenu sigurnost koja dolazi s Flask-Appbuilderom. Pregledi koje smo dodali pomoću add_view_no_menu nisu zaštićeni. Međutim, pogledi koje smo dodali na temelju DataModels automatski su zaštićeni za administratora.
Alternativno, mogli bismo koristiti Flask-Admin, koji bi uglavnom postigao sličan ishod. Flask-Admin također, definirajmo poglede na objektno orijentirani način. Web stranica na sučelju predstavlja metodu na klasi pogleda koju izričito dodajemo u sučelje.
U ovom uputstvu ne koristimo Flask-Admin. Umjesto toga, krećemo putem bržeg postizanja istih rezultata i preskakanja potrebe za znanjem o izgradnji sigurnosti oko Login, Auths, Roles i dozvola. Bilo je moguće jer smo koristili Flask-Appbuilder.
I Flask-Appbuilder kao i Flask-Admin imaju svoje prednosti i nedostatke. U slučaju Flask-Admin, moramo znati da ne postoje sigurnosne pretpostavke i možete stvarati aplikacije na temelju svog sigurnosnog modela. Da biste saznali više o Flask-Admin, posjetite ovdje i prođite kroz prikladne primjere.
Prijenos datoteke tikvice
Gotovo sve web aplikacije danas imaju zahtjeve za pohranom i posluživanjem datoteka. Tipičan obrazac za njih je spremanje datoteka na stazi na poslužitelju, s nekim informacijama za obavljanje radnje na pohranjenoj datoteci i zadržavanje u aplikacijskim modelima i prikazima.
Radit ćemo na sličnom primjeru. Izmijenimo naš model pjesme s dodatnim značajkama.
U datoteku models.py unesite sljedeći kod.
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))
Izmijenili smo naš prethodno stvoreni model pjesme dodavanjem novog stupca tipa FileColumn. Nadalje, dodali smo još dva stupca koji će se dodati u SongsView za prikaz naziva datoteke i poveznice za preuzimanje učitane datoteke.
Metoda tikvice url_for korištena je zajedno s oznakom za prikaz preuzimanja kao veze. Također, koristili smo metodu get_file_original_name iz Flask-Appbuilder-a jer se naziv datoteke sprema spajanjem u UUID kako bi se izbjegla kolizija između istih imena datoteka.
Izmijenite views.py pomoću dolje navedenog koda da biste ažurirali odgovarajući SongsView.
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']
U klasi SongsView spomenuli smo nove oznake koje trebaju biti prikazane, a želimo navesti samo stupce spomenute na navedenom popisu.
Ovdje morate imati na umu da smo modificirali model baze podataka dodavanjem stupca modelu. Odgovarajuća tablica u bazi podataka nema ovaj novi stupac. Stoga ćemo ukloniti datoteku app.db jer radimo na bazi SQLite od zadnjeg vodiča.
Alternativno, mogli bismo također upotrijebiti naredbu flask db migrate i unijeti potrebne promjene u datoteku verzije te upotrijebiti nadogradnju flask db za ažuriranje tablice. Međutim, promjena koju smo uveli je minimalna i možemo ponovno stvoriti bazu podataka aplikacija i korisnika.
Preporučujemo da u proizvodnji razmotrite upotrebu naredbi Flask-Migrate kad god napravite bilo kakve promjene u shemi baze podataka vaše aplikacije.
Upotrijebite naredbe u nastavku za uklanjanje datoteke baze podataka i ponovno stvaranje administratora.
rm app.db flask fab create-db flask fab create-admin
Sada se prijavite u aplikaciju s administratorskim vjerodajnicama i vidjet ćete izmijenjeni SongsView kao što je prikazano na donjoj slici.

Dodajte pjesmu s datotekom.

Nakon što spremite datoteku, stupci u prikazu izgledat će kao što je prikazano u nastavku.

Primijetite sljedeće vrijednosti u config.py. Prenesene datoteke bit će pohranjene na ovom putu na poslužitelju. Za ovaj tutorial bit će prenesen na stroj na kojem razvijamo ovaj uzorak aplikacije.
Provjerite put prijenosa, kao što je spomenuto u config.py. Datoteke se pohranjuju s UUID-ovima, kao što je prikazano u nastavku.

HTTPS tikvice
Što se tiče razvoja, mogli bismo i dalje pokretati našu aplikaciju Flask koja radi bez HTTPS-a. Sa sigurnosnog stajališta, HTTPS osigurava komunikaciju između legitimnog klijenta i poslužitelja.
Ova šifrirana komunikacija zahtijeva uspostavljanje povjerenja između klijenta i poslužitelja, koristeći certifikat potpisan od CA s parom javnih i privatnih ključeva. Molimo pročitajte više o tome ovdje
U ovom uputstvu upoznat ćemo vas s metodama za razvoj web stranica temeljenih na tikvicama pomoću HTTP-a tijekom razvoja.
Najbrži i najjednostavniji način uključivanja HTTPS-a tijekom razvoja je upotreba adhoc ssl_context-a, kako je dolje spomenuto u run.py. Međutim, molimo vas instalirajte pyopenssl koristeći pip u okruženju.
app.run(host='0.0.0.0', port=8080, debug=True, ssl_context='adhoc')
Nakon dodavanja ssl_context, kada prijeđete na https: // localhost: 8080 /, dobit ćete upozorenje koje izaziva sumnju u valjanost certifikata koji se koristi u ovoj komunikaciji. Štoviše, navigacija na http: // localhost: 8080 / više neće raditi.
Stoga je ovaj pristup pomalo glomazan i zahtijevat će da nastavite prihvaćati ovaj zahtjev kad god ponovo pokrenete razvojni poslužitelj.
Morate kliknuti na nesigurni pristup da biste nastavili raditi, kao što je prikazano dolje.

Alternativno, za razvoj s https značajkama, možemo proslijediti put do certifikata i ključa u Python Tupleu parametru ssl_context u metodi izvođenja. Međutim, da biste usvojili ovaj pristup, morat ćete generirati samopotpisani certifikat i ključ pomoću naredbe u nastavku.
openssl req -x509 -newkey rsa:4096 -nodes -out mycert.pem -keyout mykey.pem -days 365
Dajte odgovarajuće vrijednosti za postavljene upite.

Ostavili smo sve zadane vrijednosti. Sada zaustavite razvojni poslužitelj i dodajte certifikat puta i put ključa kako je prikazano u nastavku.
app.run(host='0.0.0.0', port=8080, debug=True, ssl_context=('mycert.pem', 'mykey.pem'))
Ovaj je pristup također sličan prethodnoj metodi korištenja Adhoc ssl_context. Međutim, u ovom slučaju detalji ostaju dulje vrijeme. Spomenuli smo 365 dana. Možete odrediti rok trajanja do dana koji su vam potrebni. Štoviše, ove se datoteke mogu dijeliti s ostalim članovima tima ako se razvijate u timu.
U proizvodnom okruženju certifikate izdaje CA, a Miguel Grinberg raspravlja o nekim slučajevima korištenja ovdje . Preporučujemo da pročitate više detalja na toj stranici.
Zaključak
U ovom uputstvu raspravljali smo o nekim obrascima koje web programeri slijede dok razvijaju značajke povezane s prijavom u tikvicu, administratorom u tikvici, prijenosom u tikvicu i HTTPS u tikvici. Dali smo primjere koda, a to mogu pokušati i čitatelji.
U našem sljedećem uputstvu pokriti ćemo koncepte proširenja Flaska i vidjeti kako stvoriti značajke temeljene na REST API-ju. Štoviše, razgovarat ćemo o tome kako možemo koristiti Twitter API unutar Flaska.
=> Ovdje istražite seriju obuka za tikvice
Preporučena literatura
- Uzorci dizajna u Javi: Singleton, Factory And Builder
- Vodič za Python tikvice - Uvod u tikvicu za početnike
- Vodič za API tikvice s primjerom | Proširenje tikvice s API-ima
- Aplikacija tikvice i izgled projekta tikvice s nacrtom i bootstrapom
- Django vs Flask Vs Node: Koji okvir odabrati
- Top 31 popularna pitanja za intervju s Python tikvicom s odgovorima
- 10 najboljih alata za dizajn baze podataka za izgradnju složenih modela podataka
- Vrhunskih 11 trendova dizajna UI / UX: što očekivati od 2021. i kasnije