flask app flask project layout with blueprint bootstrap
Acest tutorial explică cum să utilizați Flask App, Flask Blueprint și Flask Bootstrap într-un proiect Flask:
În acest subiect, ne vom îndepărta puțin de arhetipul Flask-Appbuilder pentru a ne înțelege mai bine planurile Flask. Citiți tutorialul nostru despre Flask, șabloane și vizualizări Flask și Flask cu baze de date precum MongoDB, SQLite și MySQL. Am folosit un exemplu de proiect numit flaskTutorialApp.
Cu toate acestea, puteți crea proiectul de la zero folosind comanda fab create-app flask. Această comandă creează schela necesară pentru un proiect Flask împreună cu un director de aplicație bazat pe numele aplicației dat de dvs.
=> Vezi Seria de antrenament pentru baloane pentru toți
În acest tutorial, vă explicăm despre Flask App, Flask Blueprint și Flask Bootstrap. Dezvoltăm aplicația noastră Flask inițial cu schele preexistente furnizate de Flask-Appbuilder. Apoi creăm un Flask Blueprint numit hello2. În cele din urmă, vom descrie conceptul Flask Docker prin dockerizarea aplicației noastre Flask.
cum deschideți un fișier swf
Ce veți învăța:
Aplicație Flask
Flask App este un alt nume pentru o aplicație Flask. Dacă observați codul scris în fișierul __init__.py, atunci veți observa că este creată o instanță de Flask, iar variabila este denumită aplicație. Instanța clasei Flask este Aplicația Flask, care este instanța aplicației WSGI.
from flask import Flask app = Flask(__name__)
Plan Flask
Flask Blueprint ne permite să păstrăm împreună funcțiile conexe și ajută la practici de dezvoltare mai bune. Unele dintre beneficiile Flask Blueprints sunt următoarele:
- Organizarea ușoară a aplicațiilor la scară largă.
- Crește reutilizarea codului înregistrând același Blueprint de mai multe ori.
- Un set de operații sunt înregistrate și pot fi redate ulterior după înregistrarea unui plan.
Cu fundalul de mai sus dat pe Flask Blueprint, putem merge mai departe și să proiectăm primul nostru Blueprint. Ne putem gândi și la Blueprint ca la un modul. Să creăm un plan HelloWorld.
Toate componentele, resursele și caracteristicile unui plan sunt păstrate și organizate separat de celălalt cod sursă al aplicației Flask. Înseamnă că un Flask Blueprint poate avea vizualizări, formulare, modele, fișiere statice și șabloane.
Puteți crea mai multe planuri din același set de resurse. Cu toate acestea, acest lucru poate crea confuzie și nu este o practică bună.
Creați fișiere și directoare pentru planul flacon
Să începem să creăm un Flask Blueprint cu numele hello2. Utilizați scriptul de mai jos pentru a crea structura directorului după activarea mediului virtual utilizând sursa venv / bin / activate după ce ați accesat directorul aplicației.
blueprint_name='hello2' mkdir '$blueprint_name' mkdir -p '$blueprint_name/templates/$blueprint_name' touch '$blueprint_name/templates/$blueprint_name/hello.html' mkdir '$blueprint_name/static/' touch '$blueprint_name/__init__.py' touch '$blueprint_name/views.py'
Vrem ca hello2 Blueprint să aibă opiniile pe care le vom importa în __init__.py. Creăm un director separat pentru Blueprint cu șabloane și directoare statice pentru a reda vizualizările Flask și, respectiv, pentru a servi resursele statice.
Flask Blueprint Structura directorului
Structura de directoare pentru Blueprint ar trebui să arate așa cum se arată mai jos. Utilizați comanda copac pentru a crea o ieșire similară.
Create Flask Blueprint View
Acum să definim o vizualizare simplă în views.py. Deschideți hello2 / views.py și introduceți fragmentul de cod dat mai jos.
from flask import Blueprint, render_template hello2 = Blueprint( 'hello2', __name__, template_folder='templates', static_folder='static' ) @hello2.route('/hello2') def hello2_view(): greeting = 'Hello World 2' return render_template('hello2/hello.html', greeting=greeting)
Importăm clasa Blueprint și metoda render_template. Apoi creăm un obiect Blueprint dând numele șablonului și directoarelor statice.
Apoi definim un traseu, folosind decorator @ hello2.route și un controler cu numele hello2_view. Acest controler este o funcție Python. În această funcție, atribuim o valoare unei variabile numite salut și apoi o transmitem metodei render_template.
Creați șablonul Blueprint Blueprint
Acum să creăm șablonul hello.html. Dacă ați citit tutorialele noastre anterioare, atunci trebuie să fi observat că șablonul este cu același nume pe care l-am creat pentru a rinde vizualizarea HelloWorld. Pentru acest hello2 Blueprint, creăm un nou șablon extinzându-l pe cel anterior.
Mai mult, observați că am folosit o cale semantică hello2 / hello.html în timp ce apelam render_template pentru a reda mesajul de salut în șablon. Acest model evită conflictele între șabloanele cu aceleași nume.
Utilizați fragmentul de cod de mai jos pentru a crea hello.html și salvați-l sub hello2 / templates / hello2 / path.
{% extends 'hello.html' %} {% block hello %} {{ greeting }} , from Software Testing Help.
{% endblock %}
Acest șablon este aproape similar cu hello.html. Cu toate acestea, el moștenește majoritatea părților sale HTML de la hello.html. Observați utilizarea {% block hello%} și {% endblock%}. Blocarea salut în hello2 / hello.html anulează blocul hello al șablonului de bază hello.html.
Acum să deschidem fișierul __init__.py al hello2 Blueprint și să menționăm codul de mai jos.
from app.hello2.views import * # expose all views at the blueprint level
În această declarație, importăm toate metodele decorate pe care le-am creat în views.py din hello2 Blueprint. Dacă este necesar, putem importa doar acele metode / controlere care sunt gata pentru a fi utilizate sau testate.
Înregistrați un plan Flask cu aplicația Flask
Acum permiteți-ne să deschidem __init__.py sub directorul aplicației Flask și să înregistrăm Blueprint-ul nostru hello2 așa cum se arată în codul de mai jos.
from app.hello2 import hello2 app.register_blueprint(hello2, url_prefix='/hello2')
Aici, vă rugăm să rețineți că putem importa selectiv vizualizări și le putem înregistra doar pe cele care sunt gata de utilizare sau testare.
Lăsați-ne să rulăm aplicația Flask în modul de depanare cu comanda python run.py din directorul rădăcină al proiectului și navigați la http: // localhost: 8080 / hello2 pentru a vedea dacă vizualizarea hello2 funcționează bine.
Rezultatul din browser ar trebui să fie similar cu exemplul prezentat mai jos.
Să lucrăm la o prezentare mai bună a schemei hello2 folosind cadrul de bootstrap al Twitter. Mai mult decât atât, în secțiunea următoare, veți afla mai multe despre parametrii opționali pentru a schimba comportamentul unui Flask Blueprint. Să o vedem cu ajutorul unui exemplu de Flask Blueprint numit Flask Bootstrap.
Exemplu de aplicație balon modular cu Flask Blueprint
Pe baza învățării noastre despre hello2 Flask Blueprint, să adăugăm câteva planuri pentru a înțelege cum putem crea aplicații modulare în Flask.
Să presupunem că avem o aplicație web care servește conținut vizitatorilor sub formă de cărți electronice, tutoriale și cursuri. De asemenea, are un conținut suplimentar referitor la informații despre echipă și o pagină de pornire.
Dacă încercăm să acomodăm aceste noi caracteristici în aplicația existentă, atunci va trebui să creăm vizualizări în views.py și șabloanele corespunzătoare din directorul șablonului aplicației. În mod similar, trebuie să creăm modele și formulare în models.py și forms.py.
Cu toate acestea, menținerea tuturor codurilor aplicației va deveni greoaie, iar colaborarea cu ceilalți membri ai echipei va fi prea complicată și ar putea duce la conflicte de comitere sau la un flux de lucru complex de dezvoltare.
În prezent, în această abordare convențională, structura aplicației este așa cum se arată mai jos.
Pentru a evita un astfel de scenariu, putem folosi Flask Blueprints pentru a crea module specifice caracteristicilor și conținutului respectiv. Să creăm câteva planuri Flask, cu resursele lor separate.
Fiecare dintre aspectele Flask Blueprint va arăta similar cu cel prezentat mai jos.
Utilizați scriptul de mai jos pentru a crea fișierele și directoarele necesare pentru planurile Flask planificate. Rulați acest script din directorul rădăcină al proiectului.
cd app for dir in home courses tutorials ebooks do echo 'generating files for $dir ..' mkdir -p $dir/templates/$dir touch $dir/templates/$dir/$dir.html mkdir $dir/static touch $dir/static/style.css touch $dir/__init__.py touch $dir/views.py touch $dir/models.py touch $dir/forms.py done
Să creăm mai întâi caracteristici pentru modulul de acasă.
Deschideți views.py sub directorul principal și actualizați-l cu codul de mai jos.
from flask import render_template, Blueprint home = Blueprint('home', __name__, template_folder='templates', static_folder='static') @home.route('/') def index(): return render_template('home/home.html')
În acest fișier, am importat clasa Blueprint a Flask și am instanțiat-o cu parametrii necesari cu șabloane separate și un folder static. Apoi folosim @home decoration pentru a declara ruta asociată a metodei de vizualizare numită index.
Acum creați un șablon Jinja2 base.html sub directorul șablon al aplicației. Utilizați codul de mai jos pentru a actualiza fișierul.
from Software Testing Help.
Learn More >> {% endblock %}
Ne-am extins de la baza.html a Bootstrap. Observați utilizarea div a containerului clasei și a unității erou. Mai mult, am creat un buton pentru ca utilizatorii să afle mai multe. Am modificat acest HTML și am folosit clase din cadrul Bootstrap al Twitter.
Acum reîmprospătați pagina din browser la http: // localhost: 8080 / hello2.html pentru a vedea aspectul modificat al hello2.html.
Vizualizarea Changed Hello2 va arăta similar cu cea prezentată mai jos.
Utilizarea Flask-Bootstrap depinde în totalitate de blocurile disponibile pentru suprascriere sau modificare. Putem folosi blocurile menționate mai jos pentru a personaliza experiența. O listă detaliată a tuturor blocurilor posibile poate fi văzută la https://pythonhosted.org/Flask-Bootstrap/basic-usage.html.
Uneori, când dorim doar să modificăm un bloc, mai degrabă decât să îl înlocuim complet, putem folosi funcția super () a lui Jinja2 pentru a obține rezultatele.
Creați un fișier numit hello2.css sub hello2 / static și plasați fragmentul de cod de mai jos pentru a stiliza culoarea paragrafului în hello2 / hello.html.
p { color: orange; }
Luați fragmentul de cod prezentat mai jos și plasați-l în hello2 / hello.html.
{% block styles } {{ super() }} {% endblock %}
Acum deschideți views.py din Flask Blueprint hello2 și modificați declarația blueprint așa cum se arată mai jos.
hello2 = Blueprint('hello2', __name__, template_folder='templates', static_folder='static')
Navigați la adresa URL înregistrată a Flask Blueprint, adică http: // localhost: 8080 / hello2 din nou. Rezultatul din cauza modificărilor efectuate până acum ar trebui să arate așa cum se arată mai jos.
Flask Docker
Docker ajută la containerizarea unei aplicații. Izolează mediul de care are nevoie aplicația Flask într-un mod care nu necesită medii complete virtualizate, cum ar fi mașinile virtuale.
În plus, containerele de andocare au o amprentă minimă și sunt mai confortabile de gestionat și de scalat cu ajutorul unei platforme de orchestrație. În aceste zile, când orice altă aplicație are, de asemenea, o implementare containerizată, și noi trebuie să învățăm să implementăm aplicația noastră de eșantionare ca container de andocare.
Un container bazat pe Linux poate rula pe Windows și pe un MAC. Astfel, o aplicație Flask dockerizată este implementabilă pe orice sistem de operare, indiferent de sistemul de operare în care a fost construită.
În această secțiune, vom explica pașii de andocare a unei aplicații Flask. Vom atrage acest proiect astfel încât să poată fi implementat într-un container cu toate dependențele în interior.
Primul, instalați Docker pe mașina dvs.
sudo apt-get install docker.io
După finalizarea instalării, accesați exemplul de director rădăcină al proiectului nostru și creați un fișier Docker.
Scrieți codul de mai jos în acel fișier Docker.
tipurile de testare ale sistemului de calcul includ
FROM python:3 ADD . /flaskTutorialApp WORKDIR /flaskTutorialApp RUN pip install -r requirements.txt ENTRYPOINT ['python'] CMD ['run.py']
Actualizați fișierul config.py și schimbați baza de date în SQLite, așa cum se arată mai jos.
# The SQLAlchemy connection string. SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db') # SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'
În plus, dacă aceasta este prima dată când lucrați cu SQLite în această serie de tutoriale, atunci vă rugăm să creați utilizatorul admin folosind comanda fab create-admin flask.
Verificați dacă utilizatorul administrator poate să se conecteze la aplicație.
Acum construiți imaginea de andocare a aplicației noastre eșantion folosind comanda de mai jos.
sudo docker build --tag flask-tutorial
Această comandă durează ceva timp, deoarece descarcă resurse din hub-ul de andocare. După finalizarea acestei comenzi, verificați dacă imaginile au apărut folosind comanda de mai jos.
sudo docker images
Acum rulați această imagine Docker recent creată.
sudo docker run -p 5001:8080 flask-tutorial:latest
Consola va afișa mesajele jurnal ale serverului de dezvoltare.
Instalarea Docker are ca rezultat crearea unui NIC virtual cu numele docker0. Găsiți adresa IP utilizând comanda sudo ifconfig. După ce obțineți IP-ul Docker, puteți accesa aplicația navigând la adresa URL de mai jos.
http: //: 5001
Odată ce sunteți încrezător în dezvoltarea aplicației, vă puteți implementa imaginea Docker în Docker Hub pentru ca ceilalți să o descarce și să o utilizeze.
Testarea planului balonului
Acum, să creăm câteva teste pentru testarea Blueprint hello2. Să vedem dacă aplicația noastră eșantion returnează codul HTTP corect atunci când clientul trimite o cerere de primire pentru resurse la punctul final / hello2 sau nu. Dacă vă amintiți, am înregistrat Flask Blueprint hello2 cu un url_prefix cu valoarea ca / hello2.
Creați un fișier numit test_blueprint.py sub teste și adăugați următorul test în el.
def test_hello2(client): resp = client.get('/hello2') assert 308 == resp.status_code
HTTP 308 se referă la redirecționarea permanentă și este de așteptat ca aplicația noastră Flask să redirecționeze solicitarea către resursele legate de Blueprint numit hello2.
Acum să adăugăm un alt test pentru a verifica traseul rădăcinii resurselor planului nostru. Să adăugăm un test pentru a vedea dacă are sau nu o valoare.
from app.hello2 import hello2 def test_rootpath(): assert hello2.root_path is not None
Acum, permiteți-ne să executăm aceste teste împreună cu celelalte teste pentru a ne asigura că trec.
pytest -v
Veți vedea o ieșire similară a rezultatelor testului, așa cum se arată mai jos.
Acum comiteți toate modificările la repo și publicați aceste modificări la depozitul la distanță pe Github. Comparați diferențele cu codul cu cel al ramurii principale și creați o cerere de extragere dacă nu există conflicte.
Solicitarea de extragere invocă joburile de construcție care fac parte din fluxul nostru de lucru Github. Dacă toate verificările pentru cererile de extragere din tutorial-4 nu eșuează, atunci putem combina fiabil această ramură cu masterul.
întrebări frecvente
Q # 1) Ce este Flask BluePrint?
Răspuns: Flask Blueprint este o modalitate de a structura o aplicație Flask în module mai mici și reutilizabile. Un Flask Blueprint are resursele sale separate, cum ar fi vizualizări, șabloane, fișiere statice, modele, formulare etc. Folosim abordarea Flask Blueprint pentru a crea aplicații Flask ușor de întreținut și scalabile.
Q # 2) Cum folosiți Flask Blueprint?
Răspuns: Pentru a utiliza Flask Blueprint, trebuie să-l importăm și să-l înregistrăm cu obiectul Flask Application, folosind metoda app.register_blueprint. Putem transmite o valoare parametrului url_prifix pentru a prepanda o cale către rutele planului Flask.
Concluzie
În acest tutorial, am explicat Flask Blueprints împreună cu conceptele de creare a resurselor statice pentru o aplicație Flask. Am explorat beneficiile utilizării Flask Blueprint împreună cu gândurile la resursele blueprint cu ajutorul unui plugin Flask numit Flask-Bootstrap.
Am acoperit, de asemenea, conceptele de creare a imaginii Docker a aplicației tutoriale eșantion Flask. Mai mult decât atât, am creat și două teste pentru validarea Planurilor Flask.
În următorul nostru tutorial, vom acoperi tiparele frecvent urmate în timp ce construim caracteristici în aplicațiile web folosind Flask.
=> Vizitați aici pentru a afla balonul de la zero
Lectură recomandată
- Tutorial API Flask cu exemplu | Extinderea balonului cu API-uri
- Top 31 Întrebări populare de interviu Python Flask cu răspunsuri
- Django Vs Flask Vs Node: Ce cadru să selectați
- Modele de proiectare a balonului și cele mai bune practici pentru aplicațiile web
- [Top 10] Cele mai bune platforme software de dezvoltare a aplicațiilor din 2021
- Top 51 Întrebări și răspunsuri la interviu Bootstrap