flask app flask project layout with blueprint bootstrap
Този урок обяснява как да използвате Flask App, Flask Blueprint и Flask Bootstrap в проект на Flask:
В тази тема ще се отдалечим малко от архетипа на Flask-Appbuilder, за да изградим нашето разбиране за чертежите на Flask. Прочетете нашия урок за Flask, Flask Templates & Views и Flask с бази данни като MongoDB, SQLite и MySQL. Използвахме примерен проект, наречен flaskTutorialApp.
Можете обаче да създадете проекта от нулата, като използвате командата fab create-app на колбата. Тази команда създава скеле, необходимо за проект на Flask, заедно с директория на приложението въз основа на името на приложението, дадено от вас.
=> Вижте Поредицата за обучение на колби за всички
В този урок ние обясняваме за Flask App, Flask Blueprint и Flask Bootstrap. Ние разработваме нашето приложение Flask първоначално със съществуващото скеле, предоставено от Flask-Appbuilder. След това създаваме проект на колба, наречен hello2. И накрая, ще опишем концепцията на Flask Docker, като докеризираме нашето приложение Flask.
Какво ще научите:
Flask App
Flask App е другото име за Flask Application. Ако забележите кода, написан във файла __init__.py, тогава ще забележите, че е създаден екземпляр на Flask и променливата е наречена като приложение. Екземплярът на класа Flask е приложението Flask, което е екземпляр на приложението WSGI.
from flask import Flask app = Flask(__name__)
План на колбата
Flask Blueprint ни позволява да поддържаме свързани функции заедно и помага за по-добри практики за разработка. Някои от предимствата на Flask Blueprints са следните:
- Лесна организация на широкомащабни приложения.
- Увеличава повторната употреба на код, като регистрира един и същ проект няколко пъти.
- Набор от операции се записва и впоследствие може да се възпроизведе след регистриране на план.
С горния фон, даден на Flask Blueprint, можем да продължим напред и да проектираме първия си Blueprint. Можем да възприемаме Blueprint и като модул. Нека създадем проект на HelloWorld.
Всички компоненти, ресурси и характеристики на план се съхраняват и организират отделно от другия изходен код на приложението Flask. Това означава, че Flask Blueprint може да има своите изгледи, форми, модели, статични файлове и шаблони.
Можете да създадете множество чертежи от един и същи набор от ресурси. Това обаче може да създаде объркване и не е добра практика.
Създайте Flask Blueprint файлове и директории
Нека започнем да създаваме проект на колба с името hello2. Използвайте дадения по-долу скрипт, за да създадете структурата на директориите след активиране на вашата виртуална среда, като използвате източника venv / bin / activate след като отидете в директорията на приложението.
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'
Искаме нашия hello2 Blueprint да има своите възгледи, които ще импортираме в __init__.py. Ние създаваме отделна директория за нашия Blueprint с шаблони и статични директории, за да изобразяваме Flask изгледи и да обслужваме статични ресурси, съответно.
Структура на директорията на Flask Blueprint
Структурата на директориите за Blueprint трябва да изглежда както е показано по-долу. Използвайте командата дърво, за да създадете подобен изход.
Create Flask Blueprint View
Сега нека дефинираме прост изглед вътре в views.py. Отворете hello2 / views.py и въведете дадения по-долу кодов фрагмент.
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)
Внасяме клас Blueprint и метод render_template. След това създаваме обект Blueprint, като даваме имената на шаблона и статичните директории.
След това дефинираме маршрут, използвайки декоратора @ hello2.route и контролер с името hello2_view. Този контролер е функция на Python. В тази функция ние присвояваме стойност на променлива, наречена поздрав, и след това я предаваме на метода render_template.
Създайте шаблон за проект на колба
Сега нека създадем шаблона hello.html. Ако сте чели предишните ни уроци, тогава трябва да сте забелязали, че шаблонът е със същото име, което създадохме за рендиране на изгледа HelloWorld. За този hello2 Blueprint създаваме нов шаблон, като разширяваме предишния.
Освен това забележете, че използваме семантичен път hello2 / hello.html, докато извикваме render_template, за да изобразим поздрав в шаблона. Този модел избягва конфликти между шаблоните със същото име.
Използвайте дадения по-долу кодов фрагмент, за да създадете hello.html и да го запазите под hello2 / templates / hello2 / path.
{% extends 'hello.html' %} {% block hello %} {{ greeting }} , from Software Testing Help.
{% endblock %}
Този шаблон е почти подобен на hello.html. Той обаче наследява повечето от своите HTML части от hello.html. Забележете използването на {% block hello%} и {% endblock%}. Block hello в hello2 / hello.html заменя блока hello на основния шаблон hello.html.
Сега нека да отворим файла __init__.py на hello2 Blueprint и да споменем дадения по-долу код в него.
from app.hello2.views import * # expose all views at the blueprint level
В това изявление ние импортираме всички декорирани методи, които сме създали в views.py на hello2 Blueprint. Ако е необходимо, можем да импортираме само онези методи / контролери, които са готови за използване или тестване.
как да намеря ключ за сигурност за wifi -
Регистрирайте флакон с приложението Flask
Сега нека отворим __init__.py в директорията на приложението Flask и регистрираме нашия hello2 Blueprint, както е показано в долния код.
from app.hello2 import hello2 app.register_blueprint(hello2, url_prefix='/hello2')
Тук също, моля, обърнете внимание, че можем избирателно да импортираме изгледи и да регистрираме само тези, които са готови за употреба или тестване.
Нека стартираме нашето приложение Flask в режим за отстраняване на грешки с командата python run.py от основната директория на проекта и отидете до http: // localhost: 8080 / hello2, за да видите дали изгледът на hello2 работи добре.
Резултатът в браузъра трябва да бъде подобен на примера, показан по-долу.
Нека да работим върху по-добро представяне на hello2 blueprint, като използваме рамката на bootstrap на Twitter. Освен това, в следващия раздел ще научите повече за незадължителните параметри за промяна на поведението на Флаков план. Нека да го видим с помощта на пример за проект на флакон, наречен Flask Bootstrap.
Пример за приложение на модулна колба с проект на колба
Въз основа на нашето обучение за hello2 Flask Blueprint, нека добавим още някои чертежи, за да разберем как можем да създадем модулни приложения в Flask.
Нека приемем, че имаме уеб приложение, което обслужва съдържание за посетители под формата на електронни книги, уроци и курсове. Също така има допълнително съдържание относно информацията за екипа и началната страница.
Ако се опитаме да приспособим тези нови функции в съществуващото приложение, ще трябва да създадем изгледи в views.py и съответните шаблони в директорията на шаблона на приложението. По същия начин трябва да създадем модели и форми в models.py и forms.py.
Поддържането на целия код на приложението обаче ще стане тромаво и сътрудничеството с останалите членове на екипа ще бъде твърде сложно и може да доведе до конфликти на ангажименти или сложен работен процес на разработка.
Понастоящем при този конвенционален подход структурата на приложение е както е показано по-долу.
За да избегнем такъв сценарий, можем да използваме Flask Blueprints, за да създадем модули, специфични за характеристиките и съответното съдържание. Нека създадем някои Flask Blueprints, с техните отделни ресурси.
Всяко от оформленията на Flask Blueprint ще изглежда подобно на показаното по-долу.
Използвайте дадения по-долу скрипт, за да създадете необходимите файлове и директории за планираните чертежи на флакон. Изпълнете този скрипт от основната директория на проекта.
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
Нека първо създадем функции за домашния модул.
Отворете views.py под домашната директория и го актуализирайте с дадения по-долу код.
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')
В този файл сме импортирали клас Flask’s Blueprint и сме го създали с необходимите параметри с отделни шаблони и статична папка. След това използваме @home декорация, за да декларираме свързания маршрут на метода на изгледа, наречен index.
Сега създайте шаблон base.html Jinja2 под директорията на шаблона на приложението. Използвайте дадения по-долу код, за да актуализирате файла.
from Software Testing Help.
Learn More >> {% endblock %}
Разширихме от base.html на Bootstrap. Забележете използването на div на контейнера на класа и hero-unit. Освен това създадохме бутон за потребителите да научат повече. Модифицирахме този HTML и използвахме класове от Bootstrap рамката на Twitter.
Сега опреснете страницата в браузъра на http: // localhost: 8080 / hello2.html, за да видите променения външен вид на hello2.html.
Изгледът на Changed Hello2 ще изглежда подобно на показания по-долу.
Използването на Flask-Bootstrap изцяло зависи от блоковете, които са достъпни за отмяна или модификация. Можем да използваме споменатите по-долу блокове, за да персонализираме изживяването. Подробен списък на всички възможни блокове можете да видите на https://pythonhosted.org/Flask-Bootstrap/basic-usage.html.
как да отворя xml файл
Понякога, когато просто искаме да променим блок, вместо да го заменим напълно, можем да използваме функцията super () на Jinja2, за да постигнем резултатите.
Създайте файл, наречен hello2.css под hello2 / static и поставете долния кодов фрагмент, за да оформите цвета на абзаца в hello2 / hello.html.
p { color: orange; }
Вземете кодовия фрагмент, показан по-долу, и го поставете в hello2 / hello.html.
{% block styles } {{ super() }} {% endblock %}
Сега отворете views.py на Flask Blueprint hello2 и модифицирайте инструкцията blueprint, както е показано по-долу.
hello2 = Blueprint('hello2', __name__, template_folder='templates', static_folder='static')
Отидете отново до регистрирания URL адрес на Flask Blueprint, т.е. http: // localhost: 8080 / hello2 отново. Резултатът поради направените до момента промени трябва да изглежда както е показано по-долу.
Докер за колби
Docker помага за контейнеризиране на приложение. Той изолира средата, от която се нуждае приложението Flask, по начин, че няма изискване за пълна виртуализирана среда като виртуални машини.
Освен това контейнерите за докер имат минимален отпечатък и са по-удобни за управление и мащабиране с помощта на платформа за оркестрация. В наши дни, когато всяко друго приложение също разполага с контейнерно разполагане, ние също трябва да се научим да разполагаме нашето примерно приложение като контейнер за докер.
Контейнер, базиран на Linux, може да работи на Windows и MAC. По този начин едно докерно приложение Flask може да се разполага на всяка операционна система, независимо от операционната система, в която е построено.
В този раздел ще обясним стъпките за докеризиране на приложение Flask. Ще докеризираме този проект, за да може да бъде разположен в контейнер с всички зависимости, опаковани вътре в него.
Първо, инсталирайте Docker на вашата машина.
sudo apt-get install docker.io
След като инсталацията приключи, влезте в основната директория на нашия примерен проект и създайте Dockerfile.
Напишете кода, даден по-долу, в този Dockerfile.
FROM python:3 ADD . /flaskTutorialApp WORKDIR /flaskTutorialApp RUN pip install -r requirements.txt ENTRYPOINT ['python'] CMD ['run.py']
Актуализирайте файла config.py и променете базата данни на SQLite, както е показано по-долу.
# The SQLAlchemy connection string. SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db') # SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'
Освен това, ако за първи път работите с SQLite в тази серия с уроци, моля, създайте потребителя на администратор, като използвате командата fab create-admin.
Проверете дали потребителят на администратор може да влезе в приложението.
Сега изградете образа на докер на нашето примерно приложение, като използвате командата по-долу.
sudo docker build --tag flask-tutorial
Тази команда отнема известно време, докато изтегля ресурси от центъра на докера. След като тази команда приключи, проверете дали изображенията са се появили, като използвате командата по-долу.
sudo docker images
Сега стартирайте този наскоро създаден образ на Docker.
sudo docker run -p 5001:8080 flask-tutorial:latest
Конзолата ще покаже регистрационните съобщения на сървъра за разработка.
Инсталирането на Docker води до създаването на виртуален NIC с името docker0. Намерете IP адреса, като използвате командата sudo ifconfig. След като получите IP адреса на Docker, можете да осъществите достъп до приложението, като отидете до посочения по-долу URL адрес.
http: //: 5001
След като сте уверени в развитието на приложението, можете да разположите вашето изображение на Docker в Docker Hub, за да могат другите да го изтеглят и използват.
Тестване на чертежа на колбата
Сега нека създадем няколко теста за тестване на Blueprint hello2. Нека да видим дали нашето примерно приложение връща правилния HTTP код, когато клиентът изпраща заявка за получаване на ресурси в / hello2 крайна точка или не. Ако си спомняте, ние регистрирахме нашия флакон Blueprint hello2 с url_prefix със стойността като / hello2.
Създайте файл, наречен test_blueprint.py под тестове и добавете следния тест в него.
def test_hello2(client): resp = client.get('/hello2') assert 308 == resp.status_code
HTTP 308 се отнася до Permanent Redirect и се очаква нашето приложение Flask да пренасочи заявката към ресурсите, свързани с Blueprint, наречен hello2.
Сега нека добавим още един тест за проверка на основния път на ресурсите на нашия Blueprint. Нека добавим тест, за да видим дали има стойност или не.
from app.hello2 import hello2 def test_rootpath(): assert hello2.root_path is not None
Сега нека пуснем тези тестове заедно с другите тестове, за да сме сигурни, че те преминават.
pytest -v
Ще видите подобен изход от резултатите от теста, както е показано по-долу.
Сега ангажирайте всички промени в репозитория и ги публикувайте в отдалеченото хранилище на Github. Сравнете разликите с кода с тази на главния клон и създайте заявка за изтегляне, ако няма конфликти.
Искането за изтегляне извиква задания за изграждане, които са част от нашия Github Workflow. Ако всички проверки за заявките за изтегляне от tutorial-4 не се провалят, тогава можем спокойно да обединим този клон с главния.
често задавани въпроси
В # 1) Какво представлява Flask BluePrint?
Отговор: Flask Blueprint е начин за структуриране на Flask Application в по-малки и многократно използвани модули. Flask Blueprint има отделни ресурси като изгледи, шаблони, статични файлове, модели, формуляри и др. Използваме подхода Flask Blueprint, за да създадем лесно поддържаеми и мащабируеми Flask приложения.
В # 2) Как използвате Flask Blueprint?
Отговор: За да използваме Flask Blueprint, трябва да го импортираме и регистрираме с обекта Flask Application, като използваме метода app.register_blueprint. Можем да предадем стойност на параметъра url_prifix, за да добавим път към маршрутите на Blueprint на колбата.
Заключение
В този урок обяснихме Flask Blueprints заедно с концепциите за създаване на статични ресурси за приложение Flask. Проучихме предимствата на използването на Flask Blueprint заедно с мислите за чертежни ресурси с помощта на приставка Flask, наречена Flask-Bootstrap.
Също така разгледахме концепциите за създаване на образ на Docker на примерното приложение за урок Flask. Освен това създадохме и два теста за валидиране на чертежите на колбата.
В следващия урок ще разгледаме често следваните модели, докато изграждаме функции в уеб приложенията с помощта на Flask.
=> Посетете тук, за да научите колбата от нулата
Препоръчително четене
- Урок за API на Flask с пример | Разширяване на колбата с API
- Топ 31 популярни въпроса за интервю с Python Flask с отговори
- Django Vs Flask Vs Node: Коя рамка да изберете
- Модели за дизайн на колби и най-добри практики за уеб приложения
- [Топ 10] Най-добрите софтуерни платформи за разработка на приложения от 2021 г.
- Топ 51 въпроси и отговори за интервю за Bootstrap