flask app flask project layout with blueprint bootstrap
Овај водич објашњава како користити Фласк Апп, Фласк Блуепринт и Фласк Боотстрап у пројекту Фласк:
У овој теми ћемо се мало удаљити од архетипа Фласк-Аппбуилдер-а како бисмо изградили наше разумевање нацрта Фласк-а. Прочитајте наш водич о флаши, предлошцима и погледима флаше и флаши са базама података као што су МонгоДБ, СКЛите и МиСКЛ. Користили смо пример пројекта названог фласкТуториалАпп.
Међутим, пројекат такође можете креирати од нуле помоћу команде фаб цреате-апп тиквице. Ова наредба креира скелу потребну за пројекат Фласк заједно са директоријумом апликација на основу имена апликације које сте дали.
=> Погледајте серију Обука за боце за све
У овом упутству ћемо објаснити Фласк Апп, Фласк Блуепринт и Фласк Боотстрап. Нашу апликацију Фласк у почетку развијамо помоћу већ постојећих скела које је обезбедио Фласк-Аппбуилдер. Затим креирамо Фласк Блуепринт под називом хелло2. На крају ћемо описати концепт Фласк Доцкер-а тако што ћемо доцкеризирати нашу апликацију Фласк.
Шта ћете научити:
Фласк Апп
Фласк Апп је друго име за Фласк Апплицатион. Ако приметите код написан у датотеци __инит__.пи, приметићете да је створена инстанца Фласк, а променљива је именована као апп. Примерак класе Фласк је апликација Фласк, која је инстанца ВСГИ апликације.
from flask import Flask app = Flask(__name__)
Нацрт боце
Фласк Блуепринт нам омогућава да заједно држимо сродне функције и помаже у бољим развојним праксама. Неке од предности Фласк Блуепринтс-а су следеће:
- Лака организација великих апликација.
- Повећава поновну употребљивост кода регистрацијом истог нацрта више пута.
- Скуп операција се снима и може се накнадно поновити након регистрације нацрта.
Са горњом позадином датом на Фласк Блуепринт-у, можемо кренути напред и дизајнирати свој први нацрт. Нацрт можемо сматрати и модулом. Створимо ХеллоВорлд нацрт.
Све компоненте, ресурси и карактеристике нацрта чувају се и организују одвојено од другог изворног кода апликације Фласк. То значи да Фласк Блуепринт може имати своје погледе, обрасце, моделе, статичке датотеке и предлошке.
Можете створити више нацрта из истог скупа ресурса. Међутим, то ће вероватно створити забуну и није добра пракса.
Направите Фласк Блуепринт датотеке и директоријуме
Почнимо да правимо Фласк Блуепринт са именом хелло2. Користите доленаведену скрипту за креирање структуре директоријума након активирања вашег виртуелног окружења употребом изворног венв / бин / ацтивате након одласка у директоријум апликације.
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'
Желимо да наш хелло2 Блуепринт има своје ставове које ћемо увести у свој __инит__.пи. Ми креирамо засебни директоријум за наш нацрт са предлошцима и статичким директоријумима за приказивање Фласк погледа и опслуживање статичких ресурса.
Структура директоријума тиквице
Структура директоријума за Нацрт треба да изгледа као што је приказано доле. Користите наредбу стабла да креирате сличан излаз.
Create Flask Blueprint View
Хајде сада да дефинишемо једноставан поглед унутар виевс.пи. Отворите хелло2 / виевс.пи и унесите доле дати фрагмент кода.
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)
Увозимо класу Блуепринт и методу рендер_темплате. Затим креирамо објект Блуепринт давањем имена предлошка и статичких директорија.
најбоље компаније за истраживање тржишта за које треба радити
Затим дефинишемо руту, користећи декоратор @ хелло2.роуте и контролер са именом хелло2_виев. Овај контролер је Питхон функција. У овој функцији променљивој која се назива поздрав додељујемо вредност, а затим је прослеђујемо методи рендер_темплате.
Направите шаблон нацрта боце
Сада креирајмо шаблон хелло.хтмл. Ако сте читали наше претходне водиче, онда сте сигурно приметили да је предложак истог имена као и ми који смо креирали за приказивање приказа ХеллоВорлд. За овај хелло2 нацрт креирамо нови образац проширујући претходни.
Даље, приметите да смо користили семантичку путању хелло2 / хелло.хтмл док смо позивали рендер_темплате за приказивање поздрава у предлошку. Овај образац избегава сукобе између шаблона са истим именима.
Користите доњи исечак кода да креирате хелло.хтмл и сачувате га под хелло2 / темплатес / хелло2 / патх.
{% extends 'hello.html' %} {% block hello %} {{ greeting }} , from Software Testing Help.
{% endblock %}
Овај образац је скоро сличан хелло.хтмл. Међутим, наслеђује већину својих ХТМЛ делова из хелло.хтмл. Обратите пажњу на употребу {% блоцк хелло%} и {% ендблоцк%}. Блоцк хелло у хелло2 / хелло.хтмл поништава блок хелло основног предлошка хелло.хтмл.
Сада отворимо __инит__.пи датотеку хелло2 Блуепринт-а и у њој споменимо доле дати код.
from app.hello2.views import * # expose all views at the blueprint level
У овој изјави увозимо све украшене методе које смо креирали у виевс.пи хелло2 Блуепринт-а. Ако је потребно, можемо увести само оне методе / контролере који су спремни за употребу или тестирање.
Региструјте нацрт чутуре помоћу апликације Фласк
Сада отворимо __инит__.пи у директоријуму апликације Фласк и региструјмо наш хелло2 Блуепринт као што је приказано у доњем коду.
from app.hello2 import hello2 app.register_blueprint(hello2, url_prefix='/hello2')
Овде такође имајте на уму да можемо селективно да увозимо погледе и региструјемо само оне који су спремни за употребу или тестирање.
Покренимо нашу апликацију Фласк у режиму отклањања грешака помоћу команде питхон рун.пи из основног директоријума пројекта и идите на хттп: // лоцалхост: 8080 / хелло2 да бисте видели да ли приказ хелло2 добро функционише.
Резултат у прегледачу треба да буде сличан примеру приказаном доле.

Порадимо на бољој презентацији хелло2 плана користећи Твиттер-ов оквир за покретање. Штавише, у следећем одељку ћете сазнати више о опционим параметрима за промену понашања боце боце. Да видимо то помоћу примера Фласк Блуепринт-а под називом Фласк Боотстрап.
Пример примене модуларне тиквице са нацртом тиквице
На основу нашег учења о хелло2 Фласк Блуепринт-у, додајмо још неколико нацрта да бисмо разумели како можемо да направимо модуларне апликације у Фласк-у.
Претпоставимо да имамо веб апликацију која посетиоцима пружа садржај у облику е-књига, водича и курсева. Такође садржи неке додатне садржаје који се тичу информација о тиму и почетне странице.
Ако покушамо да прилагодимо ове нове функције у постојећој апликацији, тада ћемо морати да креирамо погледе у виевс.пи и одговарајуће предлошке у директоријуму шаблона апликације. Слично томе, треба да креирамо моделе и обрасце у моделс.пи и формс.пи.
Међутим, одржавање целокупног кода апликације постаће гломазно, а сарадња са осталим члановима тима биће сувише компликована и може резултирати сукобима урезивања или сложеним развојним процесом рада.
Тренутно је у овом конвенционалном приступу структура примене приказана доле.
Да бисмо избегли такав сценарио, можемо користити Фласк Блуепринтс за стварање модула специфичних за карактеристике и одговарајући садржај. Направимо неке тиквице са њиховим одвојеним ресурсима.
Сваки распоред Фласк Блуепринт-а изгледаће слично приказаном у наставку.
Користите доленаведену скрипту да бисте креирали потребне датотеке и директоријуме за планиране нацрте тиквице. Покрените ову скрипту из основног директоријума пројекта.
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
Хајде да прво направимо функције за кућни модул.
Отворите виевс.пи у матичном директоријуму и ажурирајте га доле датим кодом.
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')
У ову датотеку смо увезли класу Фласк’с Блуепринт и направили смо инстанцу са потребним параметрима са одвојеним предлошцима и статичким директоријумом. Затим користимо украс @хоме за декларацију придружене руте методе приказа која се назива индекс.
Сада креирајте басе.хтмл Јиња2 шаблон у директоријуму шаблона апликације. Користите доњи код да бисте ажурирали датотеку.
from Software Testing Help.
врхунске компаније за видео игре за које треба да раде
Learn More >> {% endblock %}
Проширили смо се од Боотстрап-ове басе.хтмл. Обратите пажњу на употребу див контејнера класе и херо-јединице. Штавише, створили смо дугме за кориснике да сазнају више. Изменили смо овај ХТМЛ и користили класе из Твиттер-овог Боотстрап оквира.
Сада освежите страницу у прегледачу на хттп: // лоцалхост: 8080 / хелло2.хтмл да бисте видели промењени изглед хелло2.хтмл.
Поглед Цхангед Хелло2 ће изгледати слично приказаном у наставку.

Употреба Фласк-Боотстрапа у потпуности зависи од блокова који су доступни за поништавање или модификацију. Доле наведене блокове можемо користити за прилагођавање искуства. Детаљан списак свих могућих блокова може се видети на хттпс://питхонхостед.орг/Фласк-Боотстрап/басиц-усаге.хтмл.
Понекад када само желимо да изменимо блок, уместо да га у потпуности заменимо, можемо да користимо функцију супер () Јиња2 да бисмо постигли резултате.
Направите датотеку која се зове хелло2.цсс под хелло2 / статиц и поставите доњи исечак кода да бисте обликовали боју пасуса у хелло2 / хелло.хтмл.
p { color: orange; }
Узмите исјечак кода приказан испод и смјестите га у хелло2 / хелло.хтмл.
{% block styles } {{ super() }} {% endblock %}
Сада отворите виевс.пи Фласк Блуепринт хелло2 и измените наредбу нацрта као што је приказано доле.
hello2 = Blueprint('hello2', __name__, template_folder='templates', static_folder='static')
Идите поново до регистроване УРЛ адресе Фласк Блуепринт, тј. Хттп: // лоцалхост: 8080 / хелло2. Резултат због до сада урађених промена требало би да изгледа као што је приказано у наставку.

Фласк Доцкер
Доцкер помаже у контејнеризацији апликације. Изолује окружење које је потребно апликацији Фласк на начин да не постоји потреба за комплетним виртуелизованим окружењима као што су виртуелне машине.
Поред тога, контејнери са пристаништем имају минимални отисак и њима је угодније управљати и скалирати их помоћу платформе за оркестрацију. Ових дана, када свака друга апликација такође има контејнеризовану примену, и ми морамо да научимо да применимо нашу узорку апликације као доцкер контејнер.
Контејнер заснован на Линуку може се покретати на Виндовсима и МАЦ-има. Доцкеризед Фласк Апп је, према томе, расположив на било ком оперативном систему, без обзира на оперативни систем у којем је направљен.
У овом одељку ћемо објаснити кораке докеризације апликације Фласк. Доцеризираћемо овај пројекат како би могао да се примени у контејнер са свим зависностима у њему.
Први, инсталирајте Доцкер на вашој машини.
судо апт-гет инсталл доцкер.ио
Када се инсталација заврши, идите у основни директоријум нашег узорка пројекта и креирајте Доцкерфиле.
Напишите доњи код наведен у тај Доцкерфиле.
FROM python:3 ADD . /flaskTutorialApp WORKDIR /flaskTutorialApp RUN pip install -r requirements.txt ENTRYPOINT ('python') CMD ('run.py')
Ажурирајте датотеку цонфиг.пи и промените базу података у СКЛите, као што је приказано доле.
# The SQLAlchemy connection string. SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db') # SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'
Осим тога, ако ово први пут радите са СКЛитеом у овој серији туторијала, онда створите административног корисника помоћу команде фаб цреате-админ.
Проверите да ли се администратор може пријавити у апликацију.
Сада изградите доцкер слику наше примере апликације помоћу наредбе у наставку.
sudo docker build --tag flask-tutorial
Ова наредба траје неко време док преузима ресурсе са чворишта доцкера. Када је ова наредба завршена, проверите да ли су се слике појавиле помоћу наредбе у наставку.
sudo docker images
Сада покрените ову недавно створену Доцкер слику.
sudo docker run -p 5001:8080 flask-tutorial:latest
Конзола ће приказати поруке дневника развојног сервера.
Инсталација Доцкера резултира стварањем виртуелног НИЦ-а са именом доцкер0. Пронађите ИП адресу помоћу наредбе судо ифцонфиг. Једном када добијете ИП Доцкера, апликацији можете приступити тако што ћете доћи до доленаведене УРЛ адресе.
хттп: //: 5001
Једном када будете уверени у развој апликације, можете да распоредите своју Доцкер слику на Доцкер Хуб да би је остали могли преузети и користити.
Тестирање нацрта боце
Хајде сада да креирамо неколико тестова за тестирање Блуепринт хелло2. Погледајмо да ли наша примера апликација враћа тачан ХТТП код када клијент пошаље захтев за преузимање за ресурсе на / хелло2 крајњој тачки или не. Ако се сећате, регистровали смо свој Фласк Блуепринт хелло2 са урл_префик-ом са вредношћу као / хелло2.
Направите датотеку под називом тест_блуепринт.пи под тестовима и додајте следећи тест у њу.
def test_hello2(client): resp = client.get('/hello2') assert 308 == resp.status_code
ХТТП 308 односи се на Трајно преусмеравање и очекује се да наша апликација Фласк мора да преусмери захтев на ресурсе повезане са планом који се назива хелло2.
Сад ћемо додати још један тест за проверу коренске путање ресурса нашег Нацрта. Додајмо тест да видимо да ли има вредност или не.
from app.hello2 import hello2 def test_rootpath(): assert hello2.root_path is not None
Хајде сада да покренемо ове тестове заједно са осталим тестовима како бисмо били сигурни да пролазе.
pytest -v
Видели бисте сличан излаз резултата теста, као што је приказано доле.

Сада завежите све промене у репо и објавите те промене у удаљеном спремишту на Гитхуб-у. Упоредите разлике са кодом са главном граном и створите захтев за повлачење ако нема сукоба.
Захтев за повлачење позива на задатке израде који су део нашег Гитхуб тока посла. Ако све провере захтева за повлачење из туториал-4 не успеју, онда можемо безбедно спојити ову грану са главним.

Често постављана питања
П # 1) Шта је Фласк БлуеПринт?
Одговор: Фласк Блуепринт је начин за структурирање апликације Фласк у мање модуле за вишекратну употребу. Фласк Блуепринт има своје засебне ресурсе као што су погледи, предлошци, статичке датотеке, модели, обрасци итд. Користимо Фласк Блуепринт приступ за стварање лако одржаваних и скалабилних Фласк апликација.
П # 2) Како се користи Фласк Блуепринт?
Одговор: Да бисмо користили Фласк Блуепринт, морамо га увести и регистровати у објекту Фласк Апплицатион, користећи апп.регистер_блуепринт методу. Можемо проследити вредност параметру урл_прифик да бисмо додали путању до рута Фласк Блуепринт-а.
Закључак
У овом упутству објаснили смо Фласк Блуепринтс заједно са концептима стварања статичких ресурса за апликацију Фласк. Истражили смо предности коришћења Фласк Блуепринт-а заједно са размишљањима о ресурсима нацрта уз помоћ додатка Фласк под називом Фласк-Боотстрап.
Такође смо покрили концепте стварања Доцкерове слике примера туториал апликације Фласк. Штавише, такође смо креирали два теста за потврђивање нацрта боце.
У нашем следећем упутству покриваћемо најчешће коришћене обрасце током изградње карактеристика веб апликација помоћу Фласка.
=> Посетите овде да бисте научили тиквицу од огреботина
Препоручено читање
- Водич за Фласк АПИ са примером | Проширење тиквице помоћу АПИ-ја
- Топ 31 популарна питања за интервју са Питхон Фласк-ом са одговорима
- Дјанго вс Фласк Вс Ноде: Који оквир одабрати
- Узорци дизајна тиквица и најбоље праксе за веб апликације
- (Топ 10) Најбоље софтверске платформе за развој апликација из 2021. године
- Топ 51 питања и одговори за интервју за Боотстрап