Как сделать колбу: Недопустимое название — Minecraft Wiki

Содержание

Колба | Инвентарь | Как сделать в Майнкрафт

Колба | Инвентарь | Как сделать в Майнкрафт

Как сделать колбу в Майнкрафт: рецепты крафта, ресурсы, фото, хитрости и советы.

Бутылочка Как сделать бутылочку в Майнкрафт | Скриншот 1 Бутылочка Как сделать бутылочку в Майнкрафт | Скриншот 2 Previous Next
Колба — это старое название. Новое название — Бутылочка.

Бутылочку легко сделать из стекла. Бутылочку наполняют водой из любого водоёма и используют в зельеварении. Готовые бутылочки можно найти в сундуках в шахте или сокровищнице, выловить удочкой. При убийстве ведьмы редко выпадает бутылочка. После использования зелья бутылочка останется в инвентаре и её можно снова наполнить.

Как сделать колбу


Здесь указано, как сделать колбу в Майнкрафте. В рецепте крафта указываются необходимые ингредиенты и их расположение в Minecraft.

Чтобы сделать колбу в Майнкрафте потребуются: стёкла. Данные ингредиенты нужно разместить на верстаке, в соответствии с рисунком ниже. Чтобы открыть верстак нужно нажать правой кнопкой мыши на установленный верстак.

Вверх

Где найти колбу


Здесь указано, где можно найти колбу в Майнкрафте, т.е. где можно встретить колбу в Minecraft.

Вверх

Что можно сделать из колбы


Здесь указано, что можно сделать из колба в Майнкрафте, т.

е. в каких рецептах применяется #OBJECT2# в Minecraft.

Колба редко применяется в Майнкрафте для создания других предметов, но всё же есть пара интересных рецептов. Из колбы можно сделать: бутылочку мёда и бутылочку воды.

Вверх

Кому продать колбу


Здесь указано, кому продать колбу в Майнкрафте, т.е. кто покупает колбу в Minecraft.

Вверх

Команда получения колбы


Здесь указана команда, которая позволяет получить колбу в Майнкрафте, то есть как в Minecraft создать колбу.

Колбу можно призвать с помощью команды в креативном режиме.. Для этого нужно:

  1. открыть чат (клавиша «T» английская)
  2. написать команду /give @p minecraft:glass_bottle
  3. нажать клавишу «ENTER» (ВВОД)

Также можно указать количество и кому колба будут выдаваться:

  1. /give @p minecraft:glass_bottle 10
    получить 10 колб
  2. /give MinecraftMax minecraft:glass_bottle
    колба будет передан игроку с ником MinecraftMax

Команду можно прописать в командный блок, чтобы она исполнялась при получении сигнала красного камня.

Вверх

Видео про колбу


Здесь можно посмотреть видео про колбу в Майнкрафте, то есть подборка видеороликов про Minecraft, где есть колба.

Вверх

Колба своими руками, как вариант для хранения кукол формата 1/6

Как хранить кукол? Распаковывать или оставлять в коробках? Эти вопросы не раз поднимались на форумах и довольно часто вставали перед любителями кукол. К однозначному ответу прийти не возможно, у каждого своя позиция и взгляд. Лично я за то чтобы кукол распаковывать, но в то же время, к сожалению, мои девочки стоят в коробках по причине того что нет у меня шкафчика, который мог мы защитить девочек от пыли и позволял бы мне на них любоваться… пока нет))) Куклы стояли в коробках, коробки на полках и все было чудесно, пока в моем доме не появилась ОНА

Третья кукла из коллекции Barbie Avon Exclusive, Барби Весенние Лепестки, 1997 года выпуска. Это я сейчас такая умная стала, а в тот день когда ее принесла было так: Смотрите!!! Смотрите все, Барби 90-х!!! Уууууу-хууууу…
Мне она досталась не дорого, в полном аутфите и со всеми аксессуарами, но без коробки. И именно с появлением этой девочки и появилась проблема как уберечь от пыли. Не буду рассказывать про все варианты которые я перебирала, покажу вам то на чем остановилась окончательно.

Для создания данной колбы нам понадобятся следующие предметы: металлическая баночка из под леденцов, прозрачная обложка для переплета, широкий прозрачный скотч, ножницы, простой карандаш, линейка, сантиметровая лента, лист белой бумаги, спирт и бумажные салфетки.

Обложку для переплета я покупала в канцелярском магазине, они не дорогие, их стоимость зависит от плотности, я брала чуть ли не самые тонкие, но можно было и по плотней.

Итак приступаем. Для начала надо определить необходимую ширину прозрачного листа. Для этого измеряем окружность основания (нижней части баночки) по внутренним стенкам.

У меня выходит 28,3 см. Стандартный лист формата А4 имеет ширину 21 см, поэтому мне надо 1,5 листа, отрезаем. Далее эти 2 листа между собой надо соединить, пробовала разные варианты соединения, пришла к выводу что на скотч лучший вариант. С первого раза может не получится приклеить ровно, вот тут то на помощь придет спирт, при отдирании скотча остается клей на прозрачном листе, который легко удаляется спиртом.

После того как соединила оба листа отмеряю 28,3 см. и простым карандашом провожу линию. Далее подкладываю белый лист бумаги под прозрачный, чтобы моя линия была видна и подклеиваем скотч на эту сторону.


Выравниваем другой край по линии очерченной карандашом, склеиваем обе стороны. Не переживайте за места склеек, они у нас будут располагаться с задней стороны колбы и их не будет видно даже с расстояния 30 см.


Бумажными салфетками смоченными спиртом протираем внутренние и наружные стороны колбы, вставляем в основание и прикрываем крышечкой. Наша колба для куколки формата 1/6 готова.

У меня нашлись баночки из под монпансье, из них я делала колбы для куколок в пышных платьях и для LOL Surprise OMG.

Надеюсь кому то была полезна данная информация и моя идея пригодится Вам. Задавайте вопросы если что то не понятно, буду рада ответить и помочь)))

Как сделать стабилизированную розу в колбе: пошаговая инструкция

Первые забальзамированные цветы были найдены при археологических раскопках в гробницах фараонов. Растения сохранили свою форму и не рассыпались спустя 4000 лет. Долгие годы люди пытались воспроизвести технологию стабилизации цветов, чтобы сохранить их свежими на протяжении многих лет. Сегодня поговорим о том, чего достигла наука к XXI веку и можно ли сделать живой вечный цветок самому.

Как делают стабилизированные розы на продажу

Технология стабилизации растений была запатентована во Франции в 70-х гг прошлого века. Супругам Полю и Жанетт Ламберт удалось законсервировать цветы на несколько лет. Так появилась вечная роза в колбе.

Ее изготавливают следующим образом:

  • Бутон срезают, когда он достигает своей зрелости. Важно правильно уловить момент: если срезать раньше, в нем будет недостаточно сил, и он завянет, а не засохнет. Если позже — он потеряет свежий вид.

  • Цветы погружают в специальные желобы с раствором, который способствует испарению из них жидкости.

  • Бутоны помещают во вторую камеру, где их клетки заполняют консервирующим раствором на основе растительного глицерина, воды и красителя.

  • По окончанию процесса цветы промывают и сушат.

Стабилизированные розы сохраняют природную яркость и красоту. Листья и лепестки соцветий не ломаются и не крошатся, в отличие от сухоцветов.

Как сделать вечную розу своими руками: пошаговая инструкция

Полностью повторить производственную технологию не получится. Для каждого сорта и размера цветка нужны свои соотношения глицеринового консерванта, воды и красителей. Поэтому в домашних условиях не удастся создать именно вечную розу. Но вы можете стабилизировать цветок на несколько месяцев. Следуйте нашей инструкции:

  • Подрежьте стебель до желаемой длины.

  • Высушите цветок в течение суток, повесив его бутоном вниз. Он подсохнет, но не начнет вянуть.

  • Приготовьте консервант: смешайте глицерин и воду в равных пропорциях.

  • На 2 недели поставьте розу в раствор. За это время влага из ее клеток испарится и на ее место поступит консервант.

Роза готова. Остается придумать, как сделать колбу. На самом деле, стеклянный купол выполняет декоративно-защитную функцию. Он оберегает забальзамированные растения от загрязнений, влаги и солнца. Можно хранить растение и без колбы, главное — бережно с ним обращаться.

Если все-таки хочется воспроизвести розу, как из мультика «Красавица и чудовище», купите недорогой китайский вариант, где вместо живого цветка под куполом стоит искусственный. Остается только его заменить на тот, что сделали сами. Колба китайского производства хоть и отличается от европейских качественных аналогов, но защитит бутон от грязи и продлит его жизнь.

Самостоятельно сделать стабилизированную розу несложно, только стоять она будет всего несколько месяцев. Чтобы украсить интерьер настоящей неувядающей розой, закажите оригинальный цветок, забальзамированный по европейским технологиям. Он будет радовать вас

до 5 лет.

Кальян на арбузе, как сделать кальян на арбузе

При курении кальяна использовать фрукты можно разными способами. Самый простой – декор колбы. В нее можно добавить кусочки клубники, дольки апельсина и прочие кубики фруктов. к ним можно добавить лед и листья мяты. Другой способ – сделать чашу из твердых фруктов, например, гранат или яблоко. И самый интересный вариант использования фрукта при курении – это колба из больших фруктов. Сегодня мы поговорим о том, как можно применить арбуз. Он прекрасно подойдёт для любителей экзотики и необычного.

Варианты приготовления кальяна на арбузе

В первую очередь, несмотря на то, для какой части будет использоваться арбуз, его нужно тщательно вымыть. Это обезопасит курильщиков от попадания в организм вредных веществ. Итак, способ приготовления арбузного кальяна:

  • Сперва арбуз устанавливают в максимально ровное и устойчиво положение. Для большого результата можно срезать немного низ, но не доходя до мякоти. Верхушку срезают таким образом, чтобы ее использовать как крышку. Ложкой избавляются от всей мякоти, но не выбрасывают, она еще пригодится. Ее можно поместить в холодильник охладится.
  • В импровизированной крышке ножом вырезается отверстие для будущей шахты. Диаметр дырки и резинки элемента должны четко совпадать, иначе крышка не будет держаться и кальян не получится. Самое сложное в приготовлении кальяна на арбузе – добиться герметичности на этом этапе. В помощь может прийти скотч, либо другие подручные материалы.
  • Из охлажденной мякоти выдавливается весь сок. Для этого используется на выбор сито или марля. После чего полученная жидкость возвращается в арбуз. Как и в случае с обычным кальяном на колбе, низ шахты должен погружаться на два сантиметра в сок. В случае недостатка жидкости нужно долить воды. Алкоголь использовать не рекомендуется. Также не стоит смешивать с другими вкусами сока, либо добавлять минералку или лимонад.
  • Последним этапом является сборка всех элементов. Забитая чаша устанавливается на шахту и ставятся раскаленные угли. Чтобы кальян был дымным герметичность не должны быть нарушена. Для этого стык между крышкой и арбузом проклеивается скотчем в два слоя.

Для большей необычности вместо классической глиняной или керамической чаши, можно использовать фрукты, например, дыню. Она даст свой аромат и прекрасно сольется со вкусом арбуза и ягодного табака. Такой вариант чаши наиболее подходящий для данного исполнения колбы.

Чтобы сделать чашу из дыни повторяем примерно то же самое с этим фруктом. Отрезается одна четверть сбоку и вычищается вся сердцевина. С параллельной стороны проделывается отверстие для шахты. Необходимо избавится от лишней влаги при помощи салфеток. Затем из зубочисток конструируем решетку как можно плотнее, чтобы поместить на нее табак. Затем накрываем фрукт фольгой и устанавливаем на нее готовые угли. Для такой чаши лучше использовать не менее пяти углей.

Вот и все секреты приготовления кальяна на арбузе. А чтобы ваш вечер был еще более ароматным и сочным, приобретайте в нашем магазине Mongol табак Asman. Его вкус никого не оставит равнодушным. Мы желаем вам фруктового покура!

Black Desert: Светлая колба — Орбита игр

Когда в русскоязычной версии Black Desert Online появились подводные руины, то вместе с ними было введено зелье – Светлая колба. Легко ли его сделать, где его взять и вообще с какой целью его использовать. Давайте посмотрим поближе на Светлую колбу. Итак,

Светлая колба это зелье атаки, у которого следующий эффект:

Доп. урон по монстрам +30
Вся меткость +12
Макс. выносливость +200
При каждой атаке восстанавливает +3 HP
Вся защита -15
Крит. урон +10%
Макс. грузоподъемность +100 LT

Светлая колба против Эликсира зверя.

Светлая колба — очень мощное боевое зелье, которое можно сравнить с Эликсиром зверя. Светлая колба наносит больше урона, чем Эликсир зверя. Кроме того Светлая колба дает возможность не восстанавливать постоянно НР из-за баффа исцеления.
Светлая колба имеет самые высокие показатели атаки и меткости из всех зелий.
Но эликсир зверя дает боевой опыт и опыт навыков.

Светлая колбаЭликсир зверя
Доп. урон по монстрам +30Доп. урон по монстрам +15
Вся меткость +12Боевой опыт +20%
Макс. выносливость +200Опыт навыков +10%
При каждой атаке восстанавливает +3 HPПри каждой атаке восстанавливает +1 HP
Вся защита -15Урон от монстров -10%
Крит. урон +10%Шанс крит. удара +3
Макс. грузоподъемность +100 LTМакс. грузоподъемность +100 LT
Время действия 15 минутВремя действия 15 минут

С чем суммируется Светлая колба?

Если вы используете Светлую колбу, то должны знать, что это зелье не суммируется с другими зельями, кроме некоторых.
Во время действия эффекта Светлой колбы вы можете использовать только:
Бальзам храбрости (атака +20, макс. HP +200, скорость атаки +5, скорость применения навыков +5, скорость передвижения +5 на 20 минут).
Бальзам скорости (макс. грузоподъемность +200, ремесленный опыт + 20 %, скорость передвижения +5, сбор +5, рыбалка +5 на 20 минут)
Эликсир темных вод (вся атака +10, макс. выносливость +100, макс. HP +100, урон от атак в спину +10%, урон от атаки по низу +10%, урон от атаки в воздухе +10% на 20 минут)
Зелье Карка (все сопротивление +10%, снижение урона +15, макс. HP +100, скорость передвижения +5% на 20 минут)
Экстракт лесного духа (макс. НР +300, шанс крит. удара +5, при каждом попадании МР/FP/DP +3 на 20 минут)
Эликсир из жил кита (вся защита +100 на 20 сек.)
Особый эликсир из жил кита (вся защита +125 на 30 сек.).

Рецепт Светлой колбы:
Светлую колбу можно изготовить с помощью простой алхимии через окно изготовления L.
Для этого надо соединить:
• Эссенция бездны х 1
• Зелье охоты на Айн х 3
• Зелье безумия х 3
• Слезы убывающей луны х 1
Одинаковые зелья более высокого уровня можно положить в пропорции 1:3.

Где взять необходимые ингредиенты для изготовления Светлой колбы

Зелье охоты на Айн, можно изготовить на алхимическом столе по рецепту:
• Кровь грешника х 1
• Боровик х 4 шт
• Порошок черного камня х 3
• Сок кипариса х 4

Зелье безумия, можно изготовить на алхимическом столе по рецепту:
• Масло реинкарнации х 1
• Жидкий реагент х 5
• Груздь х 2
• Порошок битвы х 3
• Сок кедра х 5

Слезы убывающей луны, можно приобрести за 100,000 серебра у торговцев убывающей луны во всех крупных городах.

Велия- Кеуло
Хидель — Стай
Кальфеон — Ладжи
Алтинова – Зак
Валенсия – Сахим
Грана – Зуйя

Эссенция бездны, скорее всего самый сложный ингредиент. Эссенцию бездны можно выбить с низким шансом из монстров Пещеры Проти и Подводные руины Сикрайи.

Кроме того Эссенцию бездны можно получить выполняя следующие ежедневные задания:

Кузнец Дастин (Пещера Проти):
[Ежедневно] Представляющие угрозу в наградах 1 эссенция бездны
Алхимик Луарне (верхняя зона Подводных руин Сикрайи):
[Ежедневно] Выиграй нам немного времени! в наградах 2 эссенции бездны
Алхимик Гормин (нижняя зона Подводных руин Сикрайи):
[Ежедневно] Освирепевшие древние орудия в наградах 2 эссенции бездны
Алхимик Гормин (нижняя зона Подводных руин Сикрайи):
[Ежедневно] Причина нервозного звука в наградах 1 эссенция бездны

Статьи по теме на Орбите игр

Гайд conan exiles. как сделать краситель и стеклянные колбы — Играем вместе

Необходимые ресурсы для стеклянной бутылки для создания красителя

— Пресс-форма для стекла: создается из армированного железа в кузнечном цеху.

— Железное укрепление: создается из железных прутьев в кузнечном цеху.

— Железные слитки: создаются в печи путем плавки железной руды с углем.

— Железная руда

— Бутылки: создаются в печи путем плавки стекла в пресс-форме для стекла с углем.

— Стекло: создается в печи путем плавки кристаллов с углем.

— Кристалл: добывается в пещерах или из камней.

Как получить краситель

— Соберите нужные ресурсы.

— Создайтк форму для стеклянной колбы (Кузница: 15 железных прутьев).

— Создайте стеклянные колбы (Печь: 3 стекла на колбу).

— Заполните стеклянные колбы водой у источника воды.

— Приготовьте краситель в огнеупорном котле (наполненная водой стеклянная колба + Реагент).

— Красьте свою броню.

Как сделать стеклянные колбы Вам нужно создать форму Стеклянная колба на кузнечном верстаке с помощью 15 железных прутьев.

На момент написания этого гайда вам нужна только одна форма для каждой печи, в которой вы создаете стеклянные колбы. Она не используется, когда вы создаете стеклянную колбу, поэтому можете ее перемещать из печи в печь, если хотите.

Затем найдите немного стекла. Его можно украсть, но вы также можете создать его сами, поместив кристалл в печь.

Вам понадобится 2 кристалла, чтобы сделать 1 стекло. Идеальным животным для добычи кристаллов является Камнерог (Rocknose).

После того, как у вас есть пресс-форма и стекло, поместите их в печь. Это создаст стеклянные колбы. Нужно 3 стекла, чтобы сделать 1 стеклянную колбу.

[Conan Exiles][Гайд #4] Где найти ресурсы для Алхимии ? Золото, Серебро, Лотос


Похожие игры…

Как сделать розу в колбе в домашних условиях? ― Статьи

Букеты для подарка стали доброй классикой. Традиционно люди вручают друг другу композиции из живых цветов на праздники, да и просто по случаю. Поэтому иногда ими трудно удивить. Но такой интересный и необычный подарок, как роза в колбе, способен не только порадовать того, кому ее планируете вручить, но и приятно ошеломить.

У розы, которая помещена в емкость, есть несколько преимуществ:

  • вам не придется такой цветок поливать;
  • не нужно следить за тем, чтобы она получала солнечный свет;
  • поставьте в темный уголок;
  • хранится до трех лет;
  • станет изюминкой интерьера.

Появился такой способ сохранения цветка не так давно.  Согласно исторических данных, технологию изготовления розы в колбе изобрели флористы, немногим после того, как была открыта стабилизация. Этот процесс позволяет сохранить цвет и свежесть растения даже спустя года благодаря специальному составу, которым обрабатывается бутон и стебель.

Современные женщины часто отказываются от цветочного букета из-за его недолговечности. Цветы быстро завянут, и им с грустью придется их выбросить. А ведь можно получить вечную розу — конечно, условно, которая будет сохраняться 3-5 лет. Для этого понадобится стеклянная колба, и немного дополнительных материалов, а также сама роза.

Подобные композиции вызывают интерес и простое желание узнать, как сделать розу в колбе, ведь стоит зачастую она немало. К счастью, делается в домашних условиях роза в колбе почти так же просто, как и красивый букет из живых цветов. Более научным языком процесс, при котором растение будет сохраняться в стеклянном сосуде, называется стабилизацией, и для этого используется несколько вариантов.

Как делают розу в колбе

Зачастую стабилизацией цветов в колбе занимаются опытные флористы. Но это вовсе не значит, что ее нельзя сделать самому в домашних условиях своими руками. Конечно, вам будет только в плюс, если помимо ознакомления с фото и видео о том, как сделать розу в колбе, вы посетите мастер-класс от флористов.

Если говорить о профессионалах, то они используют для работы цветы, которые имеют идеальную форму и плотность лепестков. Обычно такие розы выращивают в Эквадоре. Такому цветку необходимо распуститься, после чего его срезают. Бутон при этом аккуратно зафиксируют, и дают постоять 10 дней. Это делается затем, чтобы из него испарялась влага, но форма сохранилась.

После этого растение заполняют составом из химических соединений на основе глицерина. Это позволяет ей сохраняться долгое время. Также бывает, что при этой процедуре розу заодно обесцвечивают чтобы перекрасить. Затем подготовленный бутон крепят на сухой стебель. Розу кладут и закрепляют на специальную подставку из дерева, отполированную до блеска. После ее ждет заключительный этап — помещение в прозрачную стеклянную емкость. Колба в данном случае обладает герметичностью.

Как видим, технология создания розы в колбе достаточно кропотливая и требует немало условий. Однако, как быть тем, кто хочет сделать ее самому? К счастью, вечная роза своими руками может быть изготовлена в домашних условиях. Достаточно следовать выбранной инструкции, а технологий, благодаря которым делается роза в колбе, всего несколько.

Способ 1-й

Простой метод для начинающих — так называемая лакированная роза в колбе. Создание займет немного времени и не потребует больших усилий. Достаточно взять лак для волос и бутон небольшого размера. Следует подкорректировать ее стебель, убрать листья, которые будут лишними. Нужно будет поместить цветок в емкость, наполненную рисом или манной крупой. Делается это осторожно, чтобы не повредить лепестки.

В таком положении стебель с бутоном оставляют на неделю. Когда он подсохнет, его покрывают лаком и подвешивают за кончик стебля. После того, как лак высохнет, его можно помещать в емкость.

Способ 2-й

Еще один простой метод получить розу в колбе — использовать для ее обработки воск. Его нужно предварительно растопить, желательно на паровой бане. После высушенный цветок нужно захватить пинцетом и окунуть в воск, и как можно быстрее достать и положить в холодную воду на несколько секунд. Такая роза будет готова, чтобы ее закрепили в стеклянном сосуде, или даже в вазе. Она немного прочнее лакированной, но цветок нужно беречь от теплых лучей и вообще от тепла.

Способ 3-й

Профессиональная технология изготовления розы в колбе доступна в домашних условиях. Такой метод использует в качестве стабилизирующего вещества глицерин, но для обработки цветка понадобится немного больше сноровки, чем для предыдущих вариантов. Для начала подготавливается раствор, который состоит из глицерина, смешанного с питьевой водой, которую желательно прокипятить, в пропорциях 1:1. Помните, что роза должна быть свежесрезанной для того, чтобы после стабилизации сохранять естественных цвет.

Чтобы достичь лучшего эффекта, цветок нужно подсушить 4 часа. После укладывают в раствор, предварительно охлажденный. Выдержать розу необходимо в общей сложности две недели. После первой недели стебель подрежьте на полсантиметра.

Готовую розу помещайте в стеклянную емкость.

Продлить жизнь цветку можно любым из этих способов. Главное бережно относиться к цветку, и стараться следовать инструкции. Роза в колбе — прекрасный утонченный подарок. Также благодаря этой методике можно подарить вторую жизнь и презентованному лично цветку.

Многие задаются вопросом — в какой емкости лучше всего хранить вечную розу? На самом деле, помещать ее можно даже в банку, но лучшим вариантом будет специальная стеклянная колба. Ее комплектуют деревянной подставкой. Чтобы роза производила эффект, лучше конечно будет выбрать специальный вариант — единичный цветок, который будет не слишком большой, но при этом пышный и красивый. Иногда производители предлагают уже готовый стабилизированный цветок в упаковке.

В любом случае, вы всегда можете сделать розу в колбе своими руками. Это и выгодно, и гораздо приятнее, ведь вам не придется больше раздумывать над запоминающимся подарком.

Как ухаживать за розой в колбе

Чтобы красота нежного цветка, который хранится в стеклянной колбе, не увядала преждевременно от ошибок в уходе, следует придерживаться нескольких правил. Не нужно вытаскивать розу из сосуда. Иначе цветок не станет храниться столько времени, на сколько вы рассчитывали изначально. Берегите его от воздействия прямых солнечных лучей — если придерживаться этого правила, роза не выцветет быстро. Также не забывайте протирать стекло от скопившейся пыли и поддон, без химических средств.

Не беритесь за колбу грязными руками — отпечатки пальцев снижают эстетику вида розы, и оттереть их не всегда бывает легко. Лучше избегать лишних взаимодействий с этой хрупкой вещью. Берегите цветок и от искусственных тепловых лучей — не ставьте рядом с ним лампы и обогреватели. Вечная роза не любит соседства с батареями.

Беречь розу нужно и от постоянного обилия влаги, хоть растение и обработано специальным образом при помощи лака, воска или глицерина. Будет лучше, если цветок будет в помещении, где температура не колеблется слишком сильно. Нехитрый свод правил поможет сохранить розу в колбе надолго.

← архив

Quickstart — Документация Flask (2.0.x)

Хотите начать? Эта страница дает хорошее представление о Flask. Выполните установку, чтобы настроить проект и сначала установить Flask.

Минимальное приложение

Минимальное приложение Flask выглядит примерно так:

 из флакона импортного флакона

app = Flask (__ имя__)

@ app.route ("/")
def hello_world ():
    return "

Привет, мир!

"

Так что же делал этот код?

  1. Сначала мы импортировали Flask class.Экземпляр этот класс будет нашим приложением WSGI.

  2. Затем мы создаем экземпляр этого класса. Первый аргумент — это имя модуля или пакета приложения. __name__ — это удобный ярлык для большинства случаев. Это необходимо для того, чтобы Flask знал, где искать ресурсы, такие как как шаблоны и статические файлы.

  3. Затем мы используем декоратор route () , чтобы сообщить Flask какой URL должен запускать нашу функцию.

  4. Функция возвращает сообщение, которое мы хотим отобразить в пользовательском браузер. Тип содержимого по умолчанию — HTML, поэтому HTML в строке будет отображаться браузером.

Сохраните его как hello.py или что-то подобное. Не звони ваше приложение flask.py , потому что это будет конфликтовать с Flask сам.

Для запуска приложения используйте команду flask или питон -m колба . Прежде чем вы сможете это сделать, вам нужно чтобы сообщить вашему терминалу, с каким приложением работать, экспортируя FLASK_APP переменная среды:

BashCMDPowershell

 $ экспорт FLASK_APP = привет
$ flask run
 * Работает на http: // 127.0.0.1: 5000 /
 
> установить FLASK_APP = hello
> пробег колбы
 * Работает на http://127.0.0.1:5000/
 
> $ env: FLASK_APP = "привет"
> пробег колбы
 * Работает на http://127.0.0.1:5000/
 

Поведение при обнаружении приложений

В качестве ярлыка, если файл называется app.py или wsgi.py , вы не нужно устанавливать переменную среды FLASK_APP . Видеть Интерфейс командной строки для более подробной информации.

Это запускает очень простой встроенный сервер, который достаточно хорош для тестирование, но, вероятно, не то, что вы хотите использовать в производстве.Для Варианты развертывания см. в разделе «Варианты развертывания».

Теперь перейдите на http://127.0.0.1:5000/, и вы должны увидеть свой привет мир приветствия.

Внешний видимый сервер

Если вы запустите сервер, вы заметите, что сервер доступен только со своего компьютера, а не с любого другого компьютера в сети. Это по умолчанию, потому что в режиме отладки пользователь приложения может выполнять произвольный код Python на вашем компьютере.

Если у вас отключен отладчик или вы доверяете пользователям в своей сети, вы можете сделать сервер общедоступным, просто добавив - хост = 0.0.0.0 в командную строку:

 $ flask run --host = 0.0.0.0
 

Указывает вашей операционной системе прослушивать все общедоступные IP-адреса.

Что делать, если сервер не запускается

В случае отказа python -m flask или flask не существует, это может быть связано с несколькими причинами. Прежде всего вам нужно посмотреть сообщение об ошибке.

Старая версия Flask

Версии Flask до 0.11 раньше имели разные способы запуска заявление.Короче говоря, команды flask не существовало, и и python -m flask . В этом случае у вас есть два варианта: либо обновитесь до более новых версий Flask, либо посмотрите на Development Server чтобы увидеть альтернативный метод запуска сервера.

Неверное имя импорта

Переменная среды FLASK_APP — это имя модуля для импорта в колба пробег . Если этот модуль назван неправильно, вы получите ошибка импорта при запуске (или если отладка включена при переходе к заявление).Он расскажет вам, что он пытался импортировать и почему это не удалось.

Самая частая причина — опечатка или то, что вы на самом деле не создавали приложение объект.

Режим отладки

Команда запуска flask может не только начать разработку. сервер. Включив режим отладки, сервер автоматически перезагрузится, если код изменяется, и в браузере будет отображаться интерактивный отладчик, если ошибка возникает во время запроса.

Предупреждение

Отладчик позволяет выполнять произвольный код Python из браузер.Он защищен булавкой, но по-прежнему представляет собой главный риск безопасности. Не запускайте сервер разработки или отладчик в производственная среда.

Чтобы включить все функции разработки, установите среду FLASK_ENV переменная до development перед вызовом flask run .

BashCMDPowershell

 $ экспорт FLASK_ENV = разработка
$ flask run
 
> установить FLASK_ENV = development
> пробег колбы
 
> $ env: FLASK_ENV = "разработка"
> пробег колбы
 

См. Также:

Экранирование HTML

При возврате HTML (тип ответа по умолчанию во Flask) любой предоставленные пользователем значения, отображаемые в выводе, должны быть экранированы для защиты от инъекционных атак.HTML-шаблоны, созданные с помощью Jinja, представлены позже сделает это автоматически.

escape () , показанный здесь, можно использовать вручную. это опущено в большинстве примеров для краткости, но вы всегда должны помнить о как вы используете ненадежные данные.

 из markupsafe import escape

@ app.route ("/ <имя>")
def привет (имя):
    return f "Здравствуйте, {escape (name)}!"
 

Если пользователю удалось отправить имя , экранирование заставляет его отображаться как текст, а не запускать скрипт в браузере пользователя.

<имя> в маршруте захватывает значение из URL и передает его функция просмотра. Эти правила переменных объясняются ниже.

Маршрутизация

Современные веб-приложения используют понятные URL-адреса, чтобы помочь пользователям. Пользователи больше вероятно, понравится страница и вернется, если на странице используется значимый URL-адрес, который они могут запомнить и использовать для прямого посещения страницы.

Используйте декоратор route () для привязки функции к URL-адресу.

 @ app.route ('/')
def index ():
    return 'Index Page'

@приложение.маршрут ('/ привет')
def привет ():
    return 'Hello, World'
 

Вы можете больше! Вы можете сделать части URL-адреса динамическими и прикрепить несколько правила функции.

Правила переменных

Вы можете добавить переменные разделы в URL, пометив разделы с помощью <имя_переменной> . Затем ваша функция получает как аргумент ключевого слова. При желании вы можете использовать конвертер, чтобы указать тип аргумента вида <преобразователь: имя_переменной> .

 из markupsafe import escape

@ app.route ('/ пользователь / <имя пользователя>')
def show_user_profile (имя пользователя):
    # показать профиль этого пользователя
    return f'User {escape (имя пользователя)} '

@ app.route ('/ post / ')
def show_post (post_id):
    # показать пост с заданным id, id - целое число
    return f'Post {post_id} '

@ app.route ('/ путь / <путь: подпуть>')
def show_subpath (подпуть):
    # показать подпуть после / path /
    return f'Subpath {escape (subpath)} '
 

Типы преобразователей:

строка

(по умолчанию) принимает любой текст без косой черты

внутр

принимает положительные целые числа

с плавающей запятой

принимает положительные значения с плавающей запятой

путь

как строка , но также принимает косые черты

uuid

принимает строки UUID

Уникальные URL-адреса / поведение перенаправления

Следующие два правила отличаются использованием косой черты в конце.

 @ app.route ('/ projects /')
def проекты ():
    return 'Страница проекта'

@ app.route ('/ о')
def about ():
    вернуть "О странице"
 

Канонический URL-адрес для конечной точки проектов имеет косую черту в конце. Это похоже на папку в файловой системе. Если вы получаете доступ к URL без завершающая косая черта ( / проекты ), Flask перенаправляет вас на канонический URL с косой чертой в конце ( / projects / ).

Канонический URL-адрес для конечной точки около не имеет завершающего слэш.Это похоже на путь к файлу. Доступ к URL-адресу с помощью завершающая косая черта ( / about / ) вызывает ошибку 404 «Не найдено». Это помогает сохраняйте уникальные URL-адреса для этих ресурсов, что помогает поисковым системам избегать индексация одной и той же страницы дважды.

URL здание

Чтобы создать URL-адрес определенной функции, используйте функцию url_for () . Он принимает имя функции в качестве первого аргумента и любое количество аргументы ключевого слова, каждый из которых соответствует переменной части правила URL.Части неизвестных переменных добавляются к URL-адресу как параметры запроса.

Зачем вам создавать URL-адреса с помощью функции реверсирования URL-адресов? url_for () вместо того, чтобы жестко закодировать их в свои шаблоны?

  1. Реверсирование часто более наглядно, чем жесткое кодирование URL-адресов.

  2. Вы можете изменить свои URL-адреса за один раз вместо того, чтобы помнить вручную изменить жестко заданные URL-адреса.

  3. Создание URL-адресов позволяет прозрачно экранировать специальные символы.

  4. Сгенерированные пути всегда абсолютны, что позволяет избежать неожиданного поведения относительных путей в браузерах.

  5. Если ваше приложение размещено вне корневого URL-адреса, например, в / myapplication вместо /, url_for () правильно сделает это за вас.

Например, здесь мы используем метод test_request_context () чтобы попробовать url_for () . test_request_context () говорит Flask вести себя так, как будто он обрабатывает запрос, даже если мы используем Оболочка Python.См. «Локальные переменные контекста».

 из фляги import url_for

@ app.route ('/')
def index ():
    вернуть 'index'

@ app.route ('/ логин')
def login ():
    вернуть 'логин'

@ app.route ('/ пользователь / <имя пользователя>')
def профиль (имя пользователя):
    вернуть f '{username} \' s profile '

с app.test_request_context ():
    печать (url_for ('индекс'))
    print (url_for ('логин'))
    print (url_for ('логин', следующий = '/'))
    print (url_for ('профиль', имя пользователя = 'Джон Доу'))
 
 /
/авторизоваться
/ войти? следующий = /
/ user / Джон% 20Doe
 

HTTP-методы

Веб-приложения используют разные методы HTTP при доступе к URL-адресам.Вам следует ознакомьтесь с методами HTTP при работе с Flask. По умолчанию, маршрут отвечает только на запросов GET . Вы можете использовать методы аргумент декоратора route () для обработки различных HTTP-методов.

 из запроса на импорт колбы

@ app.route ('/ login', methods = ['GET', 'POST'])
def login ():
    если request.method == 'POST':
        вернуть do_the_login ()
    еще:
        вернуть show_the_login_form ()
 

Если присутствует GET , Flask автоматически добавляет поддержку метода HEAD и обрабатывает запросы HEAD в соответствии с HTTP RFC.Так же, OPTIONS внедряется автоматически.

Статические файлы

Динамическим веб-приложениям также требуются статические файлы. Обычно это где файлы CSS и JavaScript берутся из. В идеале ваш веб-сервер настроен, чтобы обслуживать их для вас, но во время разработки Flask может это сделать также. Просто создайте папку с именем static в вашем пакете или рядом с ваш модуль, и он будет доступен по адресу / static в приложении.

Чтобы сгенерировать URL-адреса для статических файлов, используйте специальное 'static' имя конечной точки:

 url_for ('статический', имя файла = 'style.css')
 

Файл должен храниться в файловой системе как static / style.css .

Шаблоны рендеринга

Генерировать HTML из Python — это не весело, а на самом деле довольно громоздко, потому что вам нужно самостоятельно экранировать HTML, чтобы сохранить приложение безопасно. По этой причине Flask автоматически настраивает шаблонизатор Jinja2.

Для рендеринга шаблона вы можете использовать render_template () метод. Все, что вам нужно сделать, это указать имя шаблона и переменные, которые вы хотите передать механизму шаблонов в качестве аргументов ключевого слова. Вот простой пример того, как визуализировать шаблон:

 из флакона import render_template

@ app.route ('/ привет /')
@ app.route ('/ привет / <имя>')
def привет (name = None):
    вернуть render_template ('hello.html', name = name)
 

Flask будет искать шаблоны в папке templates .Итак, если ваш приложение является модулем, эта папка находится рядом с этим модулем, если это package это на самом деле внутри вашего пакета:

Корпус 1 : модуль:

 /application.py
/ шаблоны
    /hello.html
 

Кейс 2 : упаковка:

 / заявка
    /__init__.py
    / шаблоны
        /hello.html
 

Для шаблонов вы можете использовать всю мощь шаблонов Jinja2. Перейти к официальной документации по шаблону Jinja2 для получения дополнительной информации.

Вот пример шаблона:

 
 Привет из Flask 
{% if name%}
   

Здравствуйте, {{name}}!

{% еще %}

Привет, мир!

{% endif%}

Внутри шаблонов у вас также есть доступ к конфигурации , запрос , сеанс и г объектов а также функции url_for () и get_flashed_messages () .

Шаблоны

особенно полезны при использовании наследования.Если хотите знать, как это работает, см. Наследование шаблонов. По сути наследование шаблонов позволяет сохранить определенные элементы на каждом страница (например, верхний колонтитул, навигация и нижний колонтитул).

Автоматическое экранирование включено, поэтому, если имя содержит HTML, оно будет экранировано автоматически. Если вы можете доверять переменной и знаете, что она будет безопасный HTML (например, потому что он был получен из модуля, конвертирующего wiki разметка в HTML), вы можете пометить его как безопасный, используя Markup class или с помощью фильтра | safe в шаблон.Перейдите к документации Jinja 2, чтобы увидеть больше примеров.

Вот базовое введение в то, как работает класс Markup :

 >>> из markupsafe import Markup
>>> Разметка (' Привет% s! ')% ' hacker '
Разметка (' Hello & lt; blink & gt; hacker & lt; / blink & gt ;! ')
>>> Markup.escape (' хакер ')
Разметка ('& lt; blink & gt; hacker & lt; / blink & gt;')
>>> Разметка (' Размеченный  & raquo; HTML').striptags ()
'Размеченный \ xbb HTML'
 
Журнал изменений

Изменено в версии 0.5: Автоэскейп больше не включен для всех шаблонов. Следующий расширения для шаблонов запускают автоматическое экранирование: .html , .htm , .xml , .xhtml . Шаблоны, загруженные из строки, будут иметь автоэкранирование отключено.

Доступ к данным запроса

Для веб-приложений критически важно реагировать на данные, которые клиент отправляет сервер. В Flask эту информацию предоставляет глобальный запрос объект.Если у вас есть опыт работы с Python вам может быть интересно, как этот объект может быть глобальным и как Flask удается по-прежнему быть потокобезопасным. Ответ контекстных местных жителей:

Локальные переменные контекста

Инсайдерская информация

Если вы хотите понять, как это работает и как можно реализовать Для тестов с локальным контекстом прочтите этот раздел, в противном случае просто пропустите его.

Некоторые объекты во Flask являются глобальными, но не обычного типа. Эти объекты на самом деле являются прокси для объектов, которые являются локальными для определенного контекст.Какой полный рот. Но на самом деле это довольно легко понять.

Представьте, что контекст — это поток обработки. Приходит запрос и веб-сервер решает создать новый поток (или что-то еще, базовый объект способен работать с системами параллелизма, другими чем потоки). Когда Flask начинает свой внутренний запрос, обрабатывающий его выясняет, что текущий поток является активным контекстом и связывает текущее приложение и среды WSGI в этот контекст (поток).Он делает это разумно, чтобы одно приложение могло вызывать другое. приложение без взлома.

Так что это для вас значит? По сути, вы можете полностью игнорировать это это так, если вы не делаете что-то вроде модульного тестирования. Ты заметит, что код, зависящий от объекта запроса, внезапно сломается потому что нет объекта запроса. Решение — создание запроса возразите себе и привяжите его к контексту. Самое простое решение для модульное тестирование — использовать test_request_context () менеджер контекста.В сочетании с с оператором он привяжет тестовый запрос, чтобы вы могли с ним взаимодействовать. Вот пример:

 из запроса на импорт колбы

с app.test_request_context ('/ hello', method = 'POST'):
    # теперь вы можете что-то делать с запросом, пока
    # конец блока with, например основных утверждений:
    assert request.path == '/ привет'
    assert request.method == 'POST'
 

Другая возможность — передать всю среду WSGI в request_context () метод:

 с приложением.request_context (среда):
    assert request.method == 'POST'
 

Объект запроса

Объект запроса задокументирован в разделе API, и мы не будем рассматривать его. это здесь подробно (см. Запрос ). Вот общий обзор некоторые из наиболее распространенных операций. Прежде всего вам нужно импортировать его из колба модуль:

 из запроса на импорт колбы
 

Текущий метод запроса доступен при использовании метод атрибут.Для доступа к данным формы (data передается в запросе POST или PUT ), вы можете использовать формирует атрибут . Вот полный пример двух упомянутые выше атрибуты:

 @ app.route ('/ login', methods = ['POST', 'GET'])
def login ():
    error = Нет
    если request.method == 'POST':
        если valid_login (request.form ['имя пользователя'],
                       request.form ['пароль']):
            вернуть log_the_user_in (request.form ['имя пользователя'])
        еще:
            error = 'Неверное имя пользователя / пароль'
    # приведенный ниже код выполняется, если метод запроса
    # был GET или учетные данные недействительны
    return render_template ('логин.html ', ошибка = ошибка)
 

Что произойдет, если ключ не существует в форме атрибута? В этом в случае возникновения особой ошибки KeyError . Вы можете поймать это как стандартный KeyError , но если вы этого не сделаете, HTTP 400 Bad Request Вместо этого отображается страница с ошибкой. Так что во многих ситуациях вам не нужно решить эту проблему.

Для доступа к параметрам, представленным в URL (? Ключ = значение ), вы можете использовать args атрибут:

 поисковое слово = запрос.args.get ('ключ', '')
 

Мы рекомендуем обращаться к параметрам URL с помощью команды get или перехвата KeyError , потому что пользователи могут изменить URL-адрес и представить им 400 страница с неверным запросом в этом случае не удобна для пользователя.

Полный список методов и атрибутов объекта запроса см. к документации Запрос .

Загрузок файла

Вы можете легко обрабатывать загруженные файлы с помощью Flask. Только убедитесь, что не забудьте установить атрибут enctype = "multipart / form-data" в вашем HTML форме, иначе браузер вообще не будет передавать ваши файлы.

Загруженные файлы хранятся в памяти или во временном месте на файловая система. Вы можете получить доступ к этим файлам, посмотрев на файлов атрибут объекта запроса. Каждый загруженный файл хранится в этом словаре. Он ведет себя как стандартный объект файла Python , но он также имеет save () метод, который позволяет хранить этот файл в файловой системе сервера. Вот простой пример, показывающий, как это работает:

 из запроса на импорт колбы

@приложение.route ('/ upload', methods = ['GET', 'POST'])
def upload_file ():
    если request.method == 'POST':
        f = request.files ['the_file']
        f.save ('/ var / www / uploads / uploaded_file.txt')
    ...
 

Если вы хотите знать, как файл был назван на клиенте до того, как он был загружены в ваше приложение, вы можете получить доступ к имя файла атрибут. Однако имейте в виду, что это значение может быть подделано. так что никогда не доверяйте этой ценности. Если вы хотите использовать имя файла клиента, чтобы сохранить файл на сервере, передать его через secure_filename () функция, которая Werkzeug предоставляет для вас:

 из werkzeug.utils import secure_filename

@ app.route ('/ upload', methods = ['GET', 'POST'])
def upload_file ():
    если request.method == 'POST':
        файл = request.files ['the_file']
        file.save (f "/var/www/uploads/{secure_filename(file.filename)}")
    ...
 

Для получения лучших примеров см. Загрузка файлов.

Печенье

Для доступа к файлам cookie вы можете использовать файлы cookie атрибут. Для установки файлов cookie вы можете использовать set_cookie метод объектов ответа.В cookies атрибут объектов запроса является словарь со всеми файлами cookie, которые передает клиент. Если вы хотите использовать сеансов, не используйте файлы cookie напрямую, а вместо этого используйте Сеансы во Flask, которые добавляют вам некоторую безопасность поверх файлов cookie.

Чтение файлов cookie:

 из запроса на импорт колбы

@ app.route ('/')
def index ():
    username = request.cookies.get ('имя пользователя')
    # используйте cookies.get (ключ) вместо cookies [ключ], чтобы не получить
    # KeyError, если cookie отсутствует.

Хранение файлов cookie:

 из фляги import make_response

@ app.route ('/')
def index ():
    resp = make_response (render_template (...))
    resp.set_cookie ('имя пользователя', 'имя пользователя')
    возврат респ
 

Обратите внимание, что файлы cookie устанавливаются для объектов ответа. Поскольку вы обычно просто вернуть строки из функций просмотра Flask преобразует их в объекты ответа для вас. Если вы явно хотите это сделать, вы можете использовать функцию make_response () , а затем измените ее.

Иногда вам может потребоваться установить cookie в точке, где ответ объект еще не существует. Это возможно за счет использования Шаблон обратных вызовов отложенного запроса.

Для этого также см. Об ответах.

Перенаправления и ошибки

Чтобы перенаправить пользователя на другую конечную точку, используйте перенаправление () функция; чтобы преждевременно прервать запрос с кодом ошибки, используйте abort () функция:

 из flask import abort, redirect, url_for

@приложение.маршрут('/')
def index ():
    возврат перенаправления (url_for ('логин'))

@ app.route ('/ логин')
def login ():
    прервать (401)
    this_is_ Never_executed ()
 

Это довольно бессмысленный пример, потому что пользователь будет перенаправлен с индекс страницы, к которой они не могут получить доступ (401 означает отказ в доступе), но он показывает, как это работает.

По умолчанию для каждого кода ошибки отображается черно-белая страница ошибки. Если вы хотите настроить страницу ошибок, вы можете использовать обработчик ошибок () декоратор:

 из флакона import render_template

@приложение.обработчик ошибок (404)
def page_not_found (ошибка):
    вернуть render_template ('page_not_found.html'), 404
 

Обратите внимание на 404 после вызова render_template () . Этот сообщает Flask, что код состояния этой страницы должен быть 404, что означает не найден. По умолчанию предполагается 200, что означает: все прошло хорошо.

Дополнительные сведения см. В разделе «Обработка ошибок приложения».

Об отзывах

Возвращаемое значение из функции просмотра автоматически преобразуется в объект ответа для вас.Если возвращаемое значение - строка, это преобразованный в объект ответа со строкой в ​​качестве тела ответа, 200 OK код состояния и mimetype text / html . Если возвращаемое значение - это dict, jsonify () вызывается для получения ответа. Логика, которую Flask применяет для преобразования возвращаемых значений в ответ объектов выглядит следующим образом:

  1. Если возвращается объект ответа правильного типа, он вернулся из представления.

  2. Если это строка, объект ответа создается с этими данными и параметры по умолчанию.

  3. Если это dict, объект ответа создается с использованием jsonify .

  4. Если возвращается кортеж, элементы в кортеже могут предоставить дополнительные Информация. Такие кортежи должны иметь вид (ответ, статус) , (ответ, заголовки) или (ответ, статус, заголовки) . Статус Значение отменяет код состояния и заголовки может быть списком или словарем дополнительные значения заголовка.

  5. Если ничего из этого не сработает, Flask будет считать, что возвращаемое значение действительное приложение WSGI и преобразовать его в объект ответа.

Если вы хотите получить объект ответа внутри представления вы можете использовать функцию make_response () .

Представьте, что у вас есть такое представление:

 из флакона import render_template

@ app.errorhandler (404)
def not_found (ошибка):
    вернуть render_template ('error.html'), 404
 

Вам просто нужно обернуть возвращаемое выражение с помощью make_response () и получить объект ответа для его изменения, затем вернуть:

 из фляги import make_response

@приложение.обработчик ошибок (404)
def not_found (ошибка):
    resp = make_response (render_template ('error.html'), 404)
    resp.headers ['X-Something'] = 'Значение'
    возврат респ
 

API с JSON

Распространенным форматом ответа при написании API является JSON. Легко получить начал писать такой API с Flask. Если вы вернете dict из view, он будет преобразован в ответ JSON.

 @ app.route ("/ me")
def me_api ():
    пользователь = get_current_user ()
    возвращение {
        «имя пользователя»: пользователь.имя пользователя,
        "тема": user.theme,
        "изображение": url_for ("user_image", filename = user.image),
    }
 

В зависимости от вашего дизайна API вы можете создать ответы JSON для типы, отличные от dict . В этом случае используйте jsonify () функция, которая сериализует любые поддерживаемые Тип данных JSON. Или посмотрите расширения сообщества Flask, которые поддерживают более сложные приложения.

 из флакона import jsonify

@ app.route ("/ пользователи")
def users_api ():
    users = get_all_users ()
    вернуть jsonify ([user.to_json () для пользователя в пользователях])
 

сеансов

В дополнение к объекту запроса есть еще второй объект, называемый сеанс , который позволяет хранить информацию, относящуюся к пользователь от одного запроса к другому. Это реализовано поверх файлов cookie. для вас и криптографически подписывает файлы cookie. Это означает, что пользователь может просматривать содержимое вашего файла cookie, но не изменять его, если они не знают секретный ключ, используемый для подписи.

Для использования сессий необходимо установить секретный ключ.Вот как сессий работает:

 из сеанса импорта колбы

# Установите секретный ключ на несколько случайных байтов. Держите это в секрете!
app.secret_key = b'_5 # y2L "F4Q8z \ n \ xec] / '

@ app.route ('/')
def index ():
    если имя пользователя в сеансе:
        return f 'Вы вошли как {сессия ["имя пользователя"]}'
    return 'Вы не вошли в систему'

@ app.route ('/ login', methods = ['GET', 'POST'])
def login ():
    если request.method == 'POST':
        сессия ['имя пользователя'] = request.form ['имя пользователя']
        возврат перенаправления (url_for ('index'))
    возвращение '''
        

<тип ввода = текстовое имя = имя пользователя>

'' ' @приложение.маршрут ('/ выход из системы') def logout (): # удаляем имя пользователя из сеанса, если оно есть session.pop ('имя пользователя'; Нет) возврат перенаправления (url_for ('index'))

Как сгенерировать хорошие секретные ключи

Секретный ключ должен быть как можно более случайным. В вашей операционной системе есть способы генерации довольно случайных данных на основе криптографического случайного генератор. Используйте следующую команду, чтобы быстро создать значение для Flask.secret_key (или SECRET_KEY ):

 $ python -c 'секреты импорта; печать (секреты.token_hex ()) '
'192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf'
 

Примечание о сеансах на основе файлов cookie: Flask будет принимать значения, которые вы вводите в объект сеанса и сериализуйте их в файл cookie. Если ты найдешь значения не сохраняются между запросами, файлы cookie действительно включены, и вы не появляется четкое сообщение об ошибке, проверьте размер файла cookie на своей странице ответы по сравнению с размером, поддерживаемым веб-браузерами.

Помимо клиентских сеансов по умолчанию, если вы хотите обрабатывать вместо этого на стороне сервера есть несколько Расширения Flask, которые это поддерживают.

Сообщение мигает

Хорошие приложения и пользовательские интерфейсы основаны на обратной связи. Если пользователь не получает достаточного количества отзывов, они, вероятно, в конечном итоге возненавидят заявление. Flask предоставляет действительно простой способ дать обратную связь пользователь с системой перепрошивки. Система прошивки в основном делает это можно записать сообщение в конце запроса и получить к нему доступ в следующий (и только следующий) запрос. Обычно это сочетается с макетом шаблон для отображения сообщения.

Чтобы высветить сообщение, используйте метод flash () , чтобы получить сообщения, вы можете использовать get_flashed_messages () , который также доступны в шаблонах. См. Раздел «Мигание сообщения» для полной пример.

Лесозаготовка

Журнал изменений

Иногда вы можете оказаться в ситуации, когда вы имеете дело с данными, которые должно быть правильно, но на самом деле это не так. Например, у вас может быть некоторый клиентский код, который отправляет HTTP-запрос на сервер но он явно искажен.Это может быть вызвано вмешательством пользователя с данными или сбой клиентского кода. В большинстве случаев это нормально ответить 400 Bad Request в этой ситуации, но иногда этого не будет, и код должен продолжать работать.

Возможно, вы все еще захотите записать, что произошло что-то подозрительное. Это где регистраторы пригодятся. Начиная с Flask 0.3, логгер предварительно настроен для вас. использовать.

Вот несколько примеров вызовов журнала:

 app.logger.debug ('Значение для отладки')
приложение.logger.warning ('Произошло предупреждение (% d яблоки)', 42)
app.logger.error ('Произошла ошибка')
 

Прикрепленный регистратор является стандартным регистратором. Logger , так что переходите к официальному журналу документы для получения дополнительной информации.

См. Обработка ошибок приложения.

Подключение к промежуточному программному обеспечению WSGI

Чтобы добавить промежуточное ПО WSGI в приложение Flask, оберните wsgi_app атрибут. Например, чтобы применить Werkzeug’s ProxyFix промежуточное ПО для запуска за Nginx:

 из werkzeug.middleware.proxy_fix импорт ProxyFix
app.wsgi_app = ProxyFix (app.wsgi_app)
 

Упаковка app.wsgi_app вместо app означает, что app все еще указывает на ваше приложение Flask, а не на промежуточное ПО, поэтому вы можете продолжать использовать и настраивать приложение напрямую.

Использование расширений Flask

Расширения - это пакеты, которые помогают выполнять стандартные задачи. Для Например, Flask-SQLAlchemy предоставляет поддержку SQLAlchemy, которая упрощает и проста в использовании с Flask.

Для получения дополнительной информации о расширениях Flask см. Расширения.

Интерфейс командной строки

- Документация Flask (2.0.x)

При установке Flask устанавливается сценарий flask , командная строка Click интерфейс в вашем virtualenv. Выполняемый из терминала, этот скрипт дает доступ к встроенным, расширенным и определяемым приложением командам. - справка option предоставит дополнительную информацию о любых командах и параметрах.

Обнаружение приложений

Команда flask устанавливается Flask, а не вашим приложением; Это должно быть сказал, где найти ваше приложение, чтобы им пользоваться. FLASK_APP переменная окружения используется, чтобы указать, как загрузить приложение.

BashCMDPowershell

 $ экспорт FLASK_APP = привет
$ flask run
 
> установить FLASK_APP = hello
> пробег колбы
 
> $ env: FLASK_APP = "привет"
> пробег колбы
 

В то время как FLASK_APP поддерживает различные параметры для указания вашего приложения, большинство вариантов использования должны быть простыми. Вот типичные значения:

(ничего)

Имя «app» или «wsgi» импортируется (как «.py ”файл или пакет), автоматическое обнаружение приложения (приложение или приложение ) или factory ( create_app или make_app ).

FLASK_APP = hello

Данное имя импортируется, автоматически обнаруживая приложение ( приложение или application ) или factory ( create_app или make_app ).


FLASK_APP состоит из трех частей: необязательный путь, который устанавливает текущую рабочую каталог, файл Python или путь импорта, разделенный точками, и необязательная переменная название экземпляра или фабрики.Если имя заводское, оно может при желании после аргументов в скобках. Следующие значения демонстрируют эти частей:

FLASK_APP = src / hello

Устанавливает текущий рабочий каталог на src , затем импортирует hello .

FLASK_APP = hello.web

Импортирует путь hello.web .

FLASK_APP = hello: app2

Использует экземпляр app2 Flask в hello .

FLASK_APP = "hello: create_app ('dev')"

Фабрика create_app в hello вызывается со строкой 'dev' в качестве аргумента.

Если FLASK_APP не задано, команда попытается импортировать «приложение» или «Wsgi» (как файл или пакет «.py») и попытайтесь обнаружить приложение. экземпляр или завод.

В данном импорте команда ищет экземпляр приложения с именем приложение или приложение , затем любой экземпляр приложения.Если нет экземпляра найдено, команда ищет заводскую функцию с именем create_app или make_app , который возвращает экземпляр.

Если после имени фабрики следуют круглые скобки, их содержимое анализируется как Литералы Python и передаются как аргументы и аргументы ключевого слова в функция. Это означает, что строки по-прежнему должны быть в кавычках.

Запустите сервер разработки

Команда run запустит сервер разработки. Это заменяет Flask.run () в большинстве случаев.

 $ пробег
 * Обслуживающее приложение Flask "привет"
 * Запуск на http://127.0.0.1:5000/ (для выхода нажмите CTRL + C)
 

Предупреждение

Не используйте эту команду для запуска приложения в производственной среде. Используйте сервер разработки только во время разработки. Сервер разработки предоставляется для удобства, но не является особо безопасным, стабильный или эффективный. См. Варианты развертывания, чтобы узнать, как работать в производственной среде.

Откройте оболочку

Чтобы исследовать данные в вашем приложении, вы можете запустить интерактивный Python shell с помощью команды shell .Приложение контекст будет активен, и экземпляр приложения будет импортирован.

 $ оболочка фляжки
Python 3.6.2 (по умолчанию, 20 июля 2017 г., 03:52:27)
[GCC 7.1.1 20170630] в Linux
Приложение: пример
Экземпляр: / home / user / Projects / hello / instance
>>>
 

Используйте shell_context_processor () , чтобы добавить другой автоматический импорт.

Окружающая среда

Журнал изменений

Среда, в которой работает приложение Flask, задается FLASK_ENV переменная среды.Если не установлен, по умолчанию производство . Другая признанная среда - это development . Flask и расширения могут включить поведение на основе среда.

Если для env задано значение development , команда flask включит режим отладки и запуск фляги включит интерактивный отладчик и перезагрузчик.

BashCMDPowershell

 $ экспорт FLASK_ENV = разработка
$ flask run
 * Обслуживающее приложение Flask "привет"
 * Окружающая среда: разработка
 * Режим отладки: включен
 * Работает на http: // 127.0.0.1: 5000 / (Для выхода нажмите CTRL + C)
 * Перезагрузка с помощью inotify reloader
 * Отладчик активен!
 * PIN-код отладчика: 223-456-919
 
> установить FLASK_ENV = development
> пробег колбы
 * Обслуживающее приложение Flask "привет"
 * Окружающая среда: разработка
 * Режим отладки: включен
 * Запуск на http://127.0.0.1:5000/ (для выхода нажмите CTRL + C)
 * Перезагрузка с помощью inotify reloader
 * Отладчик активен!
 * ПИН-код отладчика: 223-456-919
 
> $ env: FLASK_ENV = "разработка"
> пробег колбы
 * Обслуживающее приложение Flask "привет"
 * Окружающая среда: разработка
 * Режим отладки: включен
 * Работает на http: // 127.0.0.1: 5000 / (Для выхода нажмите CTRL + C)
 * Перезагрузка с помощью inotify reloader
 * Отладчик активен!
 * ПИН-код отладчика: 223-456-919
 

Режим отладки

Режим отладки будет включен, когда FLASK_ENV - это разработка , как описано выше. Если вы хотите управлять режимом отладки отдельно, используйте ФЛАНЕЦ_ДЕБАГА . Значение 1 включает его, 0 отключает.

Переменные среды из dotenv

Вместо установки FLASK_APP каждый раз, когда вы открываете новый терминал, вы можете используйте поддержку Dotenv в Flask для автоматической установки переменных среды.

Если установлен python-dotenv, запуск команды flask установит переменные среды, определенные в файлах .env и .flaskenv . Это можно использовать, чтобы избежать установки FLASK_APP вручную каждый раз, когда вы открыть новый терминал и установить конфигурацию с использованием переменных среды аналогично тому, как работают некоторые службы развертывания.

Переменные, установленные в командной строке, используются вместо переменных, установленных в .env , которые используются вместо набора в .Фламинго . .flaskenv должно быть используется для общедоступных переменных, таких как FLASK_APP , а .env не должен быть привязанным к вашему репозиторию, чтобы он мог устанавливать частные переменные.

Каталоги сканируются вверх от каталога, который вы вызываете flask от, чтобы найти файлы. Текущий рабочий каталог будет установлен на расположение файла, предполагая, что это проект верхнего уровня каталог.

Файлы загружаются только командой flask или вызовом бег () .Если вы хотите загрузить эти файлы при работе в production, вам следует вызвать load_dotenv () вручную.

Настройка параметров команды

Click настроен на загрузку значений по умолчанию для параметров команды из переменные среды. Переменные используют шаблон ОПЦИЯ_Команда_команда . Например, чтобы установить порт для запуска команда вместо flask run --port 8000 :

BashCMDPowershell

 $ экспорт FLASK_RUN_PORT = 8000
$ flask run
 * Работает на http: // 127.0.0.1: 8000 /
 
> установить FLASK_RUN_PORT = 8000
> пробег колбы
 * Работает на http://127.0.0.1:8000/
 
> $ env: FLASK_RUN_PORT = 8000
> пробег колбы
 * Работает на http://127.0.0.1:8000/
 

Их можно добавить в файл .flaskenv точно так же, как FLASK_APP в управляйте параметрами команд по умолчанию.

Отключить dotenv

Команда flask покажет сообщение, если обнаружит файлы dotenv, но python-dotenv не установлен.

 $ пробег
 * Совет: присутствуют файлы .env. Сделайте «pip install python-dotenv», чтобы использовать их.
 

Вы можете указать Flask не загружать файлы dotenv, даже если python-dotenv устанавливается путем установки переменной среды FLASK_SKIP_DOTENV . Это может быть полезно, если вы хотите загрузить их вручную или если вы используете бегун проекта, который их уже загружает. Имейте в виду, что переменные среды должны быть установлены до загрузки приложения, иначе оно не будет настроить как положено.

BashCMDPowershell

 $ экспорт FLASK_SKIP_DOTENV = 1
$ flask run
 
> установить FLASK_SKIP_DOTENV = 1
> пробег колбы
 
> $ env: FLASK_SKIP_DOTENV = 1
> пробег колбы
 

Переменные среды из virtualenv

Если вы не хотите устанавливать поддержку dotenv, вы все равно можете установить среду переменные, добавляя их в конец файла virtualenv, активируйте сценарий. Активация virtualenv установит переменные.

BashCMDPowershell

Unix Bash, venv / bin / activate :

Windows CMD, venv \ Scripts \ activate.летучая мышь :

Windows Powershell, venv \ Scripts \ activate.ps1 :

> $ env: FLASK_APP = "привет"
 

Вместо этого рекомендуется использовать поддержку dotenv, так как .flaskenv может быть зафиксирован в репозитории, чтобы он работал автоматически везде, где проект выписан.

Пользовательские команды

Команда flask реализуется с помощью Click. См. Этот проект документацию для получения полной информации о написании команд.

В этом примере добавляется команда create-user , которая принимает аргумент наименование .

 импорт нажмите
из фляги импорт фляги

app = Flask (__ имя__)

@ app.cli.command ("создать-пользователя")
@ click.argument ("имя")
def create_user (имя):
    ...
 
 $ flask администратор создания пользователя
 

В этом примере добавляется та же команда, но поскольку пользователь создает , команду в группа. Это полезно, если вы хотите организовать несколько связанных команд.

 импорт нажмите
из фляги импорт фляги
из колбы.cli import AppGroup

app = Flask (__ имя__)
user_cli = AppGroup ('пользователь')

@ user_cli.command ('создать')
@ click.argument ('имя')
def create_user (имя):
    ...

app.cli.add_command (user_cli)
 

См. Раздел Тестирование команд интерфейса командной строки, чтобы узнать, как протестировать пользовательский интерфейс. команды.

Регистрация команд с чертежами

Если ваше приложение использует чертежи, вы можете дополнительно зарегистрировать CLI команды прямо на них. Когда ваш проект будет зарегистрирован на вашем приложения, соответствующие команды будут доступны для колбы команда.По умолчанию эти команды будут вложены в группу соответствия название чертежа.

 из флакона import Blueprint

bp = Blueprint ('студенты', __name__)

@ bp.cli.command ('создать')
@ click.argument ('имя')
def create (имя):
    ...

app.register_blueprint (bp)
 
 $ студенты создают алису
 

Вы можете изменить имя группы, указав параметр cli_group при создании объекта Blueprint или более поздней версии с app.register_blueprint (bp, cli_group = '... ') . Следующие эквиваленты:

 bp = Blueprint ('студенты', __name__, cli_group = 'other')
# или
app.register_blueprint (bp, cli_group = 'другое')
 
 $ flask прочее create alice
 

Указание cli_group = None удалит вложение и объединит команды непосредственно на уровень приложения:

 bp = Blueprint ('студенты', __name__, cli_group = None)
# или
app.register_blueprint (bp, cli_group = Нет)
 

Контекст приложения

Команды добавлены с помощью приложения Flask cli Команда () Декоратор будет выполнен с приложением контекст, поэтому ваша команда и расширения имеют доступ к приложению и его конфигурация.Если вы создаете команду с помощью команды Click () декоратор вместо декоратора Flask, вы можете использовать with_appcontext () , чтобы получить такое же поведение.

 импорт нажмите
из импорта flask.cli with_appcontext

@ click.command ()
@with_appcontext
def do_work ():
    ...

app.cli.add_command (do_work)
 

Если вы уверены, что команде не нужен контекст, вы можете отключить его:

 @ app.cli.command (with_appcontext = False)
def do_work ():
    ...
 

Плагины

Flask автоматически загрузит команды, указанные в flask.команды входная точка. Это полезно для расширений, которые хотят добавлять команды, когда они установлены. Точки входа указаны в setup.py

 из настройки импорта setuptools

настраивать(
    name = 'флакон-мое-расширение',
    ...,
    entry_points = {
        'flask.commands': [
            'моя-команда = flask_my_extension.commands: cli'
        ],
    },
)
 

Внутри flask_my_extension / commands.py вы можете экспортировать Click объект:

 импорт нажмите

@click.команда ()
def cli ():
    ...
 

После того, как этот пакет будет установлен в том же виртуальном окружении, что и ваш проект Flask, вы можете запустить flask my-command , чтобы вызвать команду.

Пользовательские скрипты

Когда вы используете шаблон фабрики приложений, может быть удобнее определить ваш собственный скрипт Click. Вместо использования FLASK_APP и загрузки Flask ваше приложение, вы можете создать свой собственный объект Click и экспортировать его как точка входа в консольный скрипт.

Создайте экземпляр FlaskGroup и передайте его фабрике:

 импорт нажмите
из фляги импорт фляги
из flask.cli импортировать FlaskGroup

def create_app ():
    app = Flask ('вики')
    # другая настройка
    вернуть приложение

@ click.group (cls = FlaskGroup, create_app = create_app)
def cli ():
    "" "Сценарий управления Wiki-приложением." ""
 

Определите точку входа в setup.py :

 из настройки импорта setuptools

настраивать(
    name = 'флакон-мое-расширение',
    ...,
    entry_points = {
        'console_scripts': [
            'wiki = wiki: cli'
        ],
    },
)
 

Установите приложение в виртуальном режиме в редактируемом режиме и в пользовательском скрипт доступен. Обратите внимание, что вам не нужно устанавливать FLASK_APP .

 $ pip install -e.
$ wiki run
 

Ошибки в пользовательских сценариях

При использовании специального сценария, если вы вводите ошибку в код на уровне модуля, перезагрузчик выйдет из строя, потому что он больше не может загрузить точку входа.

Команда flask , будучи отдельной от вашего кода, не имеет эта проблема и рекомендуется в большинстве случаев.

Интеграция с PyCharm

PyCharm Professional предоставляет специальную конфигурацию запуска Flask. Для Community Edition, нам нужно настроить его так, чтобы он вызывал запуск фляги Команда CLI с правильными переменными среды. Эти инструкции должен быть похож на любую другую среду IDE, которую вы, возможно, захотите использовать.

В PyCharm с открытым проектом щелкните Run в строке меню и перейдите к Edit Configurations .Вас встретит экран, похожий на это:

Есть несколько вариантов, которые можно изменить, но как только мы сделаем это для одного команду, мы можем легко скопировать всю конфигурацию и сделать единый настройка, чтобы предоставить нам доступ к другим командам, включая любые пользовательские, которые вы можете реализовать сами.

Нажмите кнопку + ( Добавить новую конфигурацию ) и выберите Python . Давать имя конфигурации, например, «запуск колбы». Для колбы пробег установите флажок "Только один экземпляр", так как вы не можете запустить сервер. более одного раза одновременно.

Выберите Имя модуля из раскрывающегося списка ( A ), затем введите колба .

Поле Parameters ( B ) установлено на команду CLI для выполнения (с любыми аргументами). В этом примере мы используем run , который будет запускать сервер разработки.

Вы можете пропустить этот следующий шаг, если используете переменные среды из dotenv. Нам нужно добавьте переменную среды ( C ) для идентификации нашего приложения.Нажмите на кнопке обзора и добавьте запись с FLASK_APP слева и Импорт Python или файл справа (например, hello ). Добавить запись с FLASK_ENV и установите его на разработка .

Далее нам нужно установить рабочий каталог ( D ) как папку, в которой наше приложение находится.

Если вы установили свой проект как пакет в своем виртуальном окружении, вы можно снять отметку с опций PYTHONPATH ( E ).Это будет точнее соответствовать тому, как вы развертываете приложение позже.

Нажмите Применить , чтобы сохранить конфигурацию, или ОК , чтобы сохранить и закрыть окно. Выберите конфигурацию в главном окне PyCharm и нажмите кнопка воспроизведения рядом с ним, чтобы запустить сервер.

Теперь, когда у нас есть конфигурация, которая запускает flask run изнутри PyCharm, мы можем скопировать эту конфигурацию и изменить аргумент Script для запуска другой команды CLI, например Оболочка колбы .

Сервер разработки

- Документация Flask (2.0.x)

Flask предоставляет команду run для запуска приложения с сервер разработки. В режиме разработки этот сервер предоставляет интерактивный отладчик и перезагружается при изменении кода.

Предупреждение

Не используйте сервер разработки при развертывании в производственной среде. Это предназначен для использования только при локальной разработке. Нет разработан, чтобы быть особенно эффективным, стабильным или безопасным.

Варианты развертывания см. В разделе «Варианты развертывания».

Командная строка

Запуск флакона Сценарий командной строки - рекомендуемый способ запуска сервер разработки. Требуется настройка среды FLASK_APP переменная, указывающая на ваше приложение, и FLASK_ENV = development to полностью включить режим разработки.

BashCMDPowershell

 $ экспорт FLASK_APP = привет
$ export FLASK_ENV = разработка
$ flask run
 
> установить FLASK_APP = hello
> установить FLASK_ENV = development
> пробег колбы
 
> $ env: FLASK_APP = "привет"
> $ env: FLASK_ENV = "разработка"
> пробег колбы
 

Это позволяет среду разработки, включая интерактивную отладчик и перезагрузчик, а затем запускает сервер на http: // localhost: 5000 /.Используйте команду flask run --help , чтобы увидеть доступные параметры и интерфейс командной строки для получения подробных инструкций по настройке и используя CLI.

Примечание

До Flask 1.0 переменная среды FLASK_ENV не использовалась. поддерживается, и вам нужно было включить режим отладки путем экспорта FLASK_DEBUG = 1 . Это все еще можно использовать для управления режимом отладки, но вы должны предпочесть настройку среды разработки, как показано выше.

Ленивая или нетерпеливая загрузка

При использовании команды flask run с перезагрузчиком сервер будет продолжать работать, даже если вы введете синтаксические ошибки или другие ошибки инициализации в коде.Доступ к сайту покажет интерактивный отладчик ошибки, а не сбой сервера. Эта функция называется «ленивая загрузка».

Если синтаксическая ошибка уже присутствует при вызове flask run , он будет немедленно выйти из строя и показать трассировку, а не ждать, пока сайт доступен. Это сделано для того, чтобы изначально сделать ошибки более заметными. в то же время позволяя серверу обрабатывать ошибки при перезагрузке.

Чтобы преодолеть это поведение и всегда немедленно выходить из строя, даже при перезагрузке, передайте опцию --eager-loading .Чтобы сервер всегда работал, даже при первоначальном вызове передайте - lazy-loading .

в коде

В качестве альтернативы команде flask run сервер разработки также можно запустить из Python с помощью метода Flask.run () . Этот Метод принимает аргументы, аналогичные параметрам интерфейса командной строки для управления сервером. Основное отличие от команды CLI в том, что сервер выйдет из строя. если есть ошибки при перезагрузке.

debug = True можно передать для включения отладчика и перезагрузчика, но переменная среды FLASK_ENV = development по-прежнему требуется для полностью включить режим разработки.

Поместите вызов в основной блок, иначе он будет мешать при попытке чтобы позже импортировать и запустить приложение на рабочем сервере.

, если __name__ == "__main__":
    app.run (отладка = True)
 

Создайте приложение Flask за несколько минут

Согласно The Pallets Projects, Flask - это облегченная структура веб-приложений WSGI. Он разработан, чтобы сделать начало работы быстрым и легким. Эта статья даже упростит задачу, показав пошаговое руководство по созданию веб-приложения Python Flask с автоматически сгенерированными данными, необходимыми для запуска приложения.

Предварительные требования:

Для начала создадим простое приложение "hello world". Сначала создайте новый проект. В терминале или командной строке создайте новый каталог:

  мкдир myproject
компакт-диск myproject  

В каталоге проекта создайте виртуальную среду для проекта. Вы можете проверить virtualenv для получения дополнительной информации. Сначала установите virtualenv , создайте его, активируйте и установите Flask:

  pip install virtualenv
#Create virtualenv
python3 -m venv venv
#Create virtualenv for windows
py -3 -m venv venv
# Активировать virualenv:
.Venv / bin / активировать
# Активируйте virualenv для windows
venv \ Scripts \ активировать
# Установить Flask в среде
pip install колба  
Вам также может понравиться: Создание служб REST с помощью Flask.

Теперь настройка проекта готова к добавлению функций. Для начала давайте создадим новый файл в том же каталоге со следующим содержимым и назовем его main.py .

  из колбы импортная колба

app = Flask (__ имя__)

@ app.route ('/')
def привет ():
    return "Hello World!"
  


Теперь мы можем запустить приложение, указав терминалу, какое приложение запускать, используя следующие команды:

  # Подскажите терминалу какое приложение запускать
экспорт FLASK_APP = main.ру
# Подскажите терминалу, какое приложение запускать для windows
установить FLASK_APP = main.py
# Запустить приложение
колба пробег  

Результат должен быть следующим, говорящим о том, что приложение работает на http://127.0.0.1:5000/ . Переход на эту страницу должен вернуть «Hello World».

Привет, мировой вывод

После завершения первой части статьи перейдем к следующей части и добавим функционал в наш проект. Для начала загрузим в наш проект SQLALCHEMY , который представляет собой набор инструментов SQL с открытым исходным кодом и объектно-реляционный преобразователь для Python.Мы загрузим некоторые другие пакеты для Flask, такие как wtforms и flask-wtforms для создания наших форм.

  # Чтобы установить Flask-SQLAlchemy
pip install pip install flask-sqlalchemy
# Чтобы установить WTForms
pip установить WTForms
# Для установки Flask-wtforms
pip install Flask-WTF  


Рекомендуется добавлять установленные пакеты в файл формата требований. Для этого выполните следующую команду:

  pip freeze requirements.txt  


Эта команда сгенерирует файл с именем требований.txt . Он используется для хранения пакетов, вы можете использовать следующую команду для установки пакетов из файла требований. (этот шаг можно пропустить, если вы запускаете код на том же компьютере, что и на предыдущих шагах.)

  pip install -r requirements.txt  

После того, как проект будет готов для новых функций, давайте добавим в него немного магии. Для начала позвольте мне быстро познакомить вас с функцией Clowiz CodeGen из Cloud Wizard.

На следующем изображении представлена ​​функция CodeGen и все ее компоненты:

Составляющие проекта

Для начала добавления магии в проект:

  1. Перейти на https: // www.clowiz.com/code-generator/, чтобы начать использовать функцию CodeGen.

  2. В разделе технологий нажмите на логотип Python Flask.

  3. В разделе метаданных заполните форму Имя (например, Сотрудник). (Это может быть что угодно.)

  4. В разделе Имя поля измените первое значение, например, на Имя .

  5. Второй можно переименовать в Email . (Измените тип данных на Электронная почта .)

  6. Третий может быть изменен на Заработная плата , а Тип данных может быть изменен на Двойной .

  7. Скопируйте код из сгенерированного раздела кода в наш файл main.py под методом hello () .

Теперь давайте определим модель базы данных, вернемся к Clowiz AppGen, выберем модель SQLAlchemy в разделе «Генераторы», скопируем сгенерированный код и вставим его в файл main.py под созданной нами формой.

После сохранения файла main.py перейдите в терминал и выполните следующие команды для создания базы данных:

  питон3
из основной импортной базы данных
db.create_all ()  


Следующим шагом является создание маршрутов для приложения обратно в Clowiz AppGen. Затем выберите из представления генераторов, скопируйте сгенерированный код, вставьте его под моделью базы данных в файл main.py и сохраните его.

Ваш файл main.py должен выглядеть следующим образом:

  из фляги импорт фляги, побег, запрос

app = Flask (__ имя__)

приложение.config ['SECRET_KEY'] = 'любой секретный ключ'

@ app.route ('/')
def привет ():
    return "Hello World!"


из flask_wtf импортировать FlaskForm
из wtforms import SubmitField, HiddenField, StringField, IntegerField, DecimalField
из wtforms.validators import Email

класс EmployeeForm (FlaskForm):
    id = Скрытое поле ()
    name = StringField ('Имя')
    email = StringField ('Электронная почта', валидаторы = [Электронная почта ()])
    зарплата = DecimalField ('Заработная плата')
    submit = SubmitField ("Сохранить")


из flask_sqlalchemy импорт SQLAlchemy
приложение.config ["SQLALCHEMY_DATABASE_URI"] = "sqlite: ////tmp/employee.db"
db = SQLAlchemy (приложение)

класс Сотрудник (db.Model):
    id = db.Column (db.Integer, primary_key = True)
    имя = db.Column (db.String)
    электронная почта = db.Column (db.String)
    зарплата = db.Column (db.Numeric)
    ссылки = db.Column (db.String)

    def __repr __ (сам):
        return "(% r,% r,% r)"% (self.name, self.email, self.salary)


from flask import render_template, request, flash, redirect, url_for

@ app.route ("/ employee", methods = ["GET", "POST"])
def createEmployee ():
    form = EmployeeForm (запрос.форма)
    сотрудники = Employee.query.all ()
    если form.validate_on_submit ():
        Сотрудник = Сотрудник (имя = form.name.data, электронная почта = form.email.data, зарплата = form.salary.data)
        db.session.add (сотрудник)
        db.session.commit ()
        db.session.refresh (сотрудник)
        db.session.commit ()
        flash («Сотрудник успешно добавлен»)
        возврат перенаправления (url_for ("createEmployee"))
    return render_template ("employee.html", title = "Сотрудник", form = form, Сотрудники = сотрудники)

@ app.route ("/ updateEmployee / ", methods = ["GET", "POST"])
def updateEmployee (employee_id):
    Сотрудник = Сотрудник.query.get (идентификатор сотрудника)
    form = EmployeeForm (request.form, obj = сотрудник)
    если form.validate_on_submit ():
        form.populate_obj (сотрудник)
        db.session.commit ()
        flash («Сотрудник успешно обновлен»)
        возврат перенаправления (url_for ("createEmployee"))
    return render_template ("employee.html", title = "Employee", form = form, employee = Employee.query.all ())

@ app.route ("/ deleteEmployee / ", methods = ["GET", "POST"])
def deleteEmployee (employee_id):
    Сотрудник = Сотрудник.query.get (идентификатор сотрудника)
    db.session.delete (сотрудник)
    db.session.commit ()
    возврат перенаправления (url_for ("createEmployee"))
  

Поскольку мы создали представление, мы должны представить форму пользователю. Посмотрим, как сгенерировать пользовательский интерфейс.

Создайте новый каталог в каталоге проекта с именем templates, используя следующие команды (эта папка должна называться шаблонами):

  1. В папке создайте два файла, один с именем layout.html (обратите внимание, он должен называться layout.html, потому что он будет импортирован в файл employee.html ), а другой - employee.html .

  шаблоны mkdir
сенсорные шаблоны / layout.html
сенсорные шаблоны / employee.html  

3. Вернитесь в Clowiz AppGen, выберите Layout из раздела Generators , скопируйте сгенерированный код и вставьте его в файл layout.html .

4. Измените раздел Generators на Template и скопируйте сгенерированный код сотруднику .html файл.

5. Сохраните файлы и запустите flask run в терминале. Затем перейдите к.

Вы должны увидеть следующее и сможете добавить новую запись.

Добавление нового сотрудника

Теперь заполните форму и сохраните значения, вы получите следующие:

Сотрудник успешно добавлен

Вы даже можете обновить запись, нажав кнопку обновления, изменив значение, которое вы хотите обновить, и сохранив его.

Показан новый сотрудник

Чтобы удалить запись, нажмите кнопку удаления.

Вы можете получить все вышеперечисленные шаги с улучшенной структурой проекта и готовой для вас сборкой докеров, нажав кнопку Загрузить как полный проект в нижней части страницы CodeGen.

Сводка

В этом руководстве мы создали простое приложение «Hello, world» с использованием Python Flask. Затем мы использовали Clowiz AppGenerator для генерации необходимого кода для полного проекта.

Дополнительная литература

Развертывание примера приложения Python Flask с использованием Heroku - Real Python

В этом руководстве вы создадите пример приложения Python Flask и развернете его с помощью Heroku, сделав его общедоступным в Интернете. Heroku снимает большую часть нагрузки на инфраструктуру, связанной с созданием и запуском веб-приложений, позволяя вам сосредоточиться на создании отличного приложения.

Помимо развертывания приложения, вы будете использовать Git для отслеживания изменений в коде, а также настроите рабочий процесс развертывания с различными средами для промежуточной и производственной среды.Используя эту настройку, вы сможете протестировать и предварительно просмотреть приложение перед выпуском.

Из этого руководства вы узнаете, как:

  • Создать пример веб-приложения Python Flask
  • Развернуть веб-приложение с помощью Heroku
  • Реализовать рабочий процесс развертывания с использованием конвейеров Heroku
  • Безопасное управление конфигурацией и секреты для различных сред

В этом руководстве предполагается, что вы понимаете основы работы веб-приложений и имеете некоторый опыт использования Git.Чтобы узнать больше об этих темах, ознакомьтесь с веб-приложениями Python с Flask (серия руководств) и Введение в Git и GitHub для разработчиков Python.

Как вы узнаете из этого руководства, объединив Flask и Heroku, вы сможете минимизировать усилия, необходимые для создания и запуска веб-приложений. Вы можете щелкнуть ссылку ниже, чтобы получить полный исходный код приложения этого руководства:

Создание примера приложения Python Flask

В этом разделе вы узнаете, как создать пример приложения Python Flask и запустить его локально.Вы собираетесь инициализировать проект, установить Flask, создать приложение и запустить его на своем компьютере. Вы также узнаете, как использовать Git для версии кода вашего приложения.

Инициализация проекта

Инициализация проекта состоит из создания каталога для вашего приложения, настройки виртуальной среды Python, в которой будут установлены зависимости, и инициализации репозитория Git . Вам не нужно использовать виртуальную среду или Git для локальной разработки, но они очень удобны и упростят разработку и развертывание на Heroku.

Начните с создания нового каталога для примера приложения Python Flask. Вы можете сделать это, выполнив следующие команды:

  $ mkdir пример приложения realpython
$ cd Realpython-пример-приложение
  

Приведенные выше команды создают папку realpython-example-app / и меняют на нее текущий рабочий каталог.

Затем вы должны создать виртуальную среду Python. Использование виртуальной среды позволяет вам управлять зависимостями вашего проекта, не вмешиваясь в файлы системного уровня, общие для всех приложений.Выполните следующие команды, чтобы создать и активировать виртуальную среду для вашего приложения. Не забудьте изменить каталог на realpython-example-app / , если вы еще этого не сделали:

  $ python3 -m venv venv
$ исходный venv / bin / активировать
  

Эти команды создают виртуальную среду с именем venv и активируют ее, поэтому пакеты будут загружаться и устанавливаться из этой среды вместо использования пакетов системного уровня.

Установка зависимостей

Первым шагом является установка пакета Flask Python.Вы можете запустить следующую команду, чтобы установить Flask, используя pip :

  $ python3 -m pip install Flask == 1.1.2
  

Приведенная выше команда устанавливает Flask версии 1.1.2 . Это версия, которую вы будете использовать в этом руководстве. Затем вам нужно создать файл requirements.txt , в котором перечислены зависимости проекта. Для этой задачи можно использовать команду python3 -m pip freeze :

  $ python3 -m pip freeze> требования.текст
  

Вы будете использовать requirements.txt при развертывании проекта, чтобы сообщить Heroku, какие пакеты должны быть установлены для запуска кода вашего приложения. Чтобы узнать больше о том, как установить Flask в виртуальной среде и другие варианты pip , ознакомьтесь с документацией по установке Flask и Что такое Pip? Руководство для начинающих питонистов.

Теперь каталог приложения должен выглядеть так:

  realpython-пример-приложение /
│
├── venv /
│
└── требования.текст
  

В следующих разделах вы добавите дополнительные файлы для реализации логики приложения, настроите Git и затем развернете его в Heroku.

Написание кода приложения

В этом разделе вы создадите небольшое приложение Flask с одним маршрутом , индексом , которое возвращает текст Hello World! по запросу. Чтобы создать приложение Flask, вы должны создать объект Flask , который представляет ваше приложение, а затем связать представления с маршрутами.Flask заботится об отправке входящих запросов в правильное представление на основе URL-адреса запроса и маршрутов, которые вы определили.

Вы можете щелкнуть ссылку ниже, чтобы получить полный исходный код для этого учебного приложения:

Для небольших приложений, подобных тому, с которым вы работаете в этом руководстве, вы можете написать весь код в одном файле, организовав свой проект следующим образом:

  realpython-пример-приложение /
│
├── venv /
│
├── app.py
└── requirements.txt
  

ок.py содержит код приложения, в котором вы создаете приложение и его представления. В следующем блоке кода показан полный исходный код приложения:

  из колбы импортная колба

app = Flask (__ имя__)

@ app.route ("/")
def index ():
    return "Hello World!"
  

После импорта flask код создает объект app , который принадлежит к классу Flask . Функция просмотра index () связана с основным маршрутом с помощью приложения .route () декоратор. Когда запрашивается основной маршрут, Flask обслуживает запрос, вызывая index () и используя его возвращаемое значение в качестве ответа.

Локальный запуск примера Python Flask

Существуют различные способы запуска приложения, созданного в предыдущем разделе. Один из самых простых способов запустить приложение Flask для локальной разработки - использовать команду flask run с терминала:

По умолчанию Flask будет запускать приложение, которое вы определили в приложении .py на порт 5000 . Пока приложение работает, перейдите по адресу http: // localhost: 5000 с помощью своего веб-браузера. Вы увидите веб-страницу с сообщением Hello World!

Во время разработки вы обычно хотите автоматически перезагружать приложение всякий раз, когда вы вносите в него изменения. Вы можете сделать это, передав переменную окружения FLASK_ENV = development в flask run :

.
  $ FLASK_ENV = запуск флакона разработки
  

Когда вы устанавливаете FLASK_ENV = development , Flask будет отслеживать изменения в файлах приложения и перезагружать сервер, когда есть изменения.Таким образом, вам не нужно вручную останавливать и перезапускать сервер приложений после каждого изменения.

Отслеживание изменений с помощью Git

В этом руководстве вы собираетесь отслеживать изменения в файлах вашего проекта с помощью Git, очень популярной системы контроля версий (VCS) . Итак, в качестве первого шага вы должны создать репозиторий Git для своего проекта. Вы можете добиться этого, выполнив следующую команду в каталоге вашего проекта:

Приведенная выше команда инициализирует репозиторий, который будет использоваться для отслеживания файлов проекта.Метаданные репозитория хранятся в скрытом каталоге с именем .git / .

Обратите внимание, что есть некоторые папки, которые не следует включать в репозиторий Git, например venv / и __pycache __ / . Вы можете указать Git игнорировать их, создав файл с именем .gitignore . Используйте следующие команды для создания этого файла:

  $ эхо Venv> .gitignore
$ эхо __pycache__ >> .gitignore
$ git add .gitignore app.py requirements.txt
$ git commit -m "Инициализировать репозиторий Git"
  

После выполнения вышеуказанных команд Git будет отслеживать изменения в файлах вашего приложения, но игнорировать папки venv / и __pycache __ / .Теперь каталог проекта realpython-example-app / должен выглядеть так:

  realpython-пример-приложение /
│
├── .git /
│
├── venv /
│
├── .gitignore
├── app.py
└── requirements.txt
  

Теперь вы готовы развернуть свое приложение с помощью Heroku. Ознакомьтесь с разделом Введение в Git и GitHub для разработчиков Python, чтобы узнать больше о Git и о том, как разместить свой репозиторий в GitHub.

Развертывание приложения на Heroku

Heroku делает создание и развертывание приложений действительно удобными для разработчиков.Он снимает большую часть бремени, связанного с созданием и запуском веб-приложений, заботясь о большинстве деталей инфраструктуры и позволяя вам сосредоточиться на создании и улучшении приложения. Некоторые детали, обрабатываемые Heroku, включают:

  • Создание сертификатов HTTPS
  • Управление записями DNS
  • Запуск и обслуживание серверов

В оставшейся части этого раздела вы узнаете, как развернуть ранее созданное веб-приложение в Интернете с помощью Heroku.К концу этого раздела ваше приложение станет общедоступным по красивому URL-адресу и будет обслуживаться с использованием HTTPS.

Настройка учетной записи Heroku

Ваш первый шаг - создать учетную запись Heroku. Если у вас его еще нет, вы можете использовать тариф «Бесплатно и хобби». Он позволяет развертывать некоммерческие приложения, личные проекты и эксперименты, не тратя денег.

Если вы перейдете на страницу регистрации Heroku, вы увидите следующие поля в форме регистрации:

Вы сможете начать использовать Heroku после того, как заполните необходимую информацию и подтвердите свой адрес электронной почты.

Интерфейс командной строки Heroku (CLI)

Интерфейс командной строки Heroku (CLI) - это инструмент, который позволяет создавать приложения Heroku и управлять ими с терминала. Это самый быстрый и удобный способ развернуть ваше приложение. Инструкции по установке для вашей операционной системы вы можете найти в документации разработчика. В большинстве дистрибутивов Linux вы можете установить Heroku CLI, выполнив следующую команду:

  $ curl https: // cli-assets.heroku.com/install.sh | ш
  

Предыдущая команда загружает установщик Heroku CLI и выполняет его. Затем вам необходимо войти в систему, выполнив следующую команду:

Откроется веб-сайт с кнопкой для завершения процесса входа в систему. Нажмите Войти , чтобы завершить процесс аутентификации и начать использовать Heroku CLI:

После входа в систему вы готовы начать использовать Heroku CLI для управления своими приложениями и рабочими процессами.

Развертывание приложения на Heroku

В этом разделе вы узнаете, как использовать Heroku CLI и Git для развертывания вашего веб-приложения.Первым шагом является создание файла с именем Procfile в корневом каталоге проекта. Этот файл сообщает Heroku, как запустить приложение. Вы можете создать его, выполнив следующую команду:

  $ echo "web: gunicorn app: app"> Procfile
  

Обратите внимание, что это имя файла должно начинаться с заглавной буквы. Этот файл указывает Heroku обслуживать ваше приложение с помощью Gunicorn, HTTP-сервера интерфейса шлюза веб-сервера Python (WSGI), совместимого с различными веб-фреймворками, включая Flask.Обязательно установите Gunicorn и обновите файл requirements.txt , используя pip :

  $ python3 -m pip install gunicorn == 20.0.4
$ python3 -m pip freeze> requirements.txt
  

Предыдущие команды устанавливают Gunicorn и обновляют requirements.txt , чтобы он содержал список всех зависимостей. Поскольку вы добавляли и изменяли файлы, вам необходимо зафиксировать их в Git. Вы можете сделать это, выполнив следующие две команды:

  $ git add Требования к Procfile.текст
$ git commit -m "Добавить файлы развертывания Heroku"
  

Выполнив указанные выше команды, вы зафиксируете последние версии Procfile и requirements.txt в репозитории Git. Теперь вы готовы развернуть приложение в Heroku. Начните с создания приложения Heroku с помощью Heroku CLI.

Примечание: В этом руководстве в качестве имени приложения используется realpython-example-app . Поскольку имена приложений на Heroku должны быть уникальными, вам нужно будет выбрать другое имя для своего развертывания.

Вы можете создать приложение в Heroku, выполнив следующую команду:

  $ heroku создать приложение realpython-example-app
  

Выполнение указанной выше команды инициализирует приложение Heroku, создавая Git-пульт с именем heroku . Затем вы можете отправить репозиторий Git на этот пульт, чтобы запустить процесс сборки и развертывания:

После передачи ветки master на удаленный heroku вы увидите, что в выходных данных отображается информация о процессе сборки и развертывания:

  1Перечень объектов: 6, выполнено.2Учет объектов: 100% (6/6), выполнено.
 Сжатие 3Delta с использованием до 8 потоков
 4 Сжатие объектов: 100% (4/4), готово.
 5Пишущие объекты: 100% (6/6), 558 байт | 558.00 КиБ / с, готово.
 6 Итого 6 (дельта 0), повторно 0 (дельта 0)
 7remote: Сжатие исходных файлов ... готово.
 8remote: Источник сборки:
 9дистанционный:
10remote: -----> Построение на стеке Heroku-18
11remote: -----> Обнаружено приложение Python
12remote: -----> Установка python-3.6.12
13remote: -----> Установка pip 20.1.1, setuptools 47.1.1 и колесо 0.34.2
14remote: -----> Установка SQLite3
15remote: -----> Требования к установке с помощью pip
16remote: Сбор кликов == 7.1.2
17remote: загрузка click-7.1.2-py2.py3-none-any.whl (82 КБ)
18remote: Collecting Flask == 1.1.2
Удаленное: загрузка Flask-1.1.2-py2.py3-none-any.whl (94 КБ)
20remote: опасно собирать == 1.1.0
21remote: загрузка itsdangerous-1.1.0-py2.py3-none-any.whl (16 КБ)
22remote: Сбор Jinja2 == 2.11.2
23remote: загрузка Jinja2-2.11.2-py2.py3-none-any.whl (125 КБ)
24remote: Сбор MarkupSafe == 1.1.1
Удаленный: загрузка MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl
26 дистанционное управление: сбор Werkzeug == 1.0.1
27 удаленный: загрузка Werkzeug-1.0.1-py2.py3-none-any.whl (298 КБ)
28remote: Установка собранных пакетов: click, Werkzeug, itsdangerous,
29MarkupSafe, Jinja2, Flask
30remote: успешно установлен Flask-1.1.2 Jinja2-2.11.2 MarkupSafe-1.1.1
31Werkzeug-1.0.1 нажмите-7.1.2 itsdangerous-1.1.0
32remote: -----> Обнаружение типов процессов
33 удаленный: Procfile объявляет типы -> (нет)
34дистанционный:
35дистанционный: -----> Сжатие ...
36 удалено: Сделано: 45,1 млн
37 пульт: -----> Запуск ...
38remote: Выпущена v1
39 удаленный: https://realpython-example-app.herokuapp.com/ развернут на Heroku
40дистанционный:
41remote: Проверка развертывания ... выполнено.
42 К https://git.heroku.com/realpython-example-app.git
43 * [новая ветка] мастер -> мастер
  

Поздравляем, приложение теперь онлайн! В выходных данных показан процесс сборки, включая установку зависимостей и развертывание.В строке 39 вы найдете URL-адрес вашего приложения. В данном случае это https://realpython-example-app.herokuapp.com/ . Вы также можете использовать следующую команду интерфейса командной строки Heroku, чтобы открыть URL-адрес вашего приложения:

Приведенная выше команда откроет ваше приложение с помощью веб-браузера по умолчанию.

Примечание. Строка 12 выходных данных указывает, что Python 3.6.12 будет использоваться в качестве среды выполнения вашего приложения. На момент написания этого руководства это была версия по умолчанию. Чтобы узнать, как настроить версию Python и другие параметры среды выполнения, ознакомьтесь с документацией по среде выполнения Python от Heroku.

Теперь давайте внесем небольшие изменения в приложение и посмотрим, как его можно повторно развернуть. Отредактируйте app.py и измените строку, возвращаемую функцией index () , как показано в следующем блоке кода:

  1 из колбы импортная колба
 2
 3app = Flask (__ name__)
 4
 [email protected] ("/")
 6def index ():
 7 return "Здравствуйте, это новая версия!"
  

Как вы видите в строке 7, «Hello World!» был заменен на "Здравствуйте, это новая версия!" Вы можете развернуть эту версию на Heroku, зафиксировав и отправив изменения на heroku remote:

  $ git add app.ру
$ git commit -m "Изменить приветственное сообщение"
$ git push герой мастер
  

С помощью этих команд вы фиксируете изменения в локальном репозитории Git и отправляете их на удаленный компьютер heroku . Это снова запускает процесс сборки и развертывания. Вы можете повторять эти шаги всякий раз, когда вам нужно развернуть новую версию вашего приложения. Вы заметите, что последующие развертывания обычно занимают меньше времени, поскольку требования уже установлены.

В этом разделе вы узнали, как создать и развернуть свое приложение на Heroku с помощью Git и Heroku CLI.Дополнительные сведения об использовании Heroku CLI для развертывания приложений Python см. В статье «Начало работы на Heroku с Python».

Использование трубопроводов Heroku для реализации рабочего процесса развертывания

В этом разделе вы узнаете, как реализовать рабочий процесс для развертывания приложения с помощью конвейеров Heroku. В этом конкретном рабочем процессе используются три отдельные среды: local , staging и production . Этот вид настройки широко используется в профессиональных проектах, поскольку он позволяет тестировать и проверять новые версии перед их развертыванием в производственной среде и представлением их реальным пользователям.

Общие сведения о рабочем процессе развертывания

Как вы видели выше, при использовании этого рабочего процесса вы будете запускать приложение в трех отдельных средах:

  1. Разработка - это локальная среда.
  2. Staging - это среда подготовки производства, используемая для предварительного просмотра и тестирования.
  3. Производство - это действующий сайт, к которому имеют доступ конечные пользователи.

В предыдущих разделах вы видели, как запустить приложение в вашей локальной среде и в производственной среде на Heroku.Добавление промежуточной среды может значительно улучшить процесс разработки. Основная цель этой среды - интегрировать изменения из всех новых веток и запустить интеграционные тесты для сборки, которая станет следующим выпуском.

Далее вы увидите, как создать промежуточную среду в Heroku и как создать конвейер с по , чтобы продвигать версии от подготовки к производству. На следующей схеме показан этот рабочий процесс:

На изображении выше показаны три среды, действия, которые происходят в каждой из них, а также этапы развертывания и продвижения.

Реализация рабочего процесса развертывания в Heroku

Реализация рабочего процесса в Heroku состоит из двух шагов:

  1. Создание отдельных приложений для постановки и производства
  2. Делает оба приложения частью одного конвейера

A Конвейер Heroku - это группа приложений, объединенных рабочим процессом. Каждое из этих приложений представляет собой среду в рабочем процессе разработки, например промежуточной или производственной. Использование конвейеров гарантирует, что после продвижения в продакшене будет работать тот же код, который вы просматривали при постановке.

В этом руководстве в качестве производственной среды используется ранее созданное приложение Heroku realpython-example-app . Вы должны создать новое приложение Heroku для промежуточной среды, используя следующие команды:

  $ heroku create realpython-example-app-staging --remote staging
$ git push мастер постановки
  

Выполнение этих команд создает новое приложение Heroku с именем realpython-example-app-staging и развертывает приложение в нем с помощью Git.Затем вы можете получить доступ к промежуточному приложению по адресу https://realpython-example-app-staging.herokuapp.com/ . Обратите внимание, что с этим приложением связан пульт Git с именем staging .

Теперь, когда у вас есть приложения Heroku для производства и размещения, вы готовы создать конвейер Heroku, который связывает их вместе. Вы можете использовать Heroku CLI для создания конвейера:

  конвейеров $ heroku: создать --app realpython-example-app \
    - сценическое производство \
    Realpython-пример-приложение
Создание конвейера realpython-example-app... сделано
Добавление ⬢ realpython-example-app в конвейер realpython-example-app в качестве рабочей среды
... сделано
  

Приведенная выше команда создает конвейер с именем realpython-example-app и добавляет приложение с именем realpython-example-app в качестве производственной среды. Затем выполните следующую команду, чтобы создать пульт Git, указывающий на это приложение, назвав его prod :

.
  $ heroku git: remote --app realpython-example-app --remote prod
  

С этого момента производственное развертывание можно обозначать как prod .

Затем добавьте промежуточное приложение в тот же конвейер, выполнив следующую команду:

  $ heroku pipelines: добавить приложение realpython-example-app \
  --app realpython-example-app-staging \
  - постановка сцены
Добавление ⬢ realpython-example-app-staging в конвейер realpython-example-app как
постановка ... сделано
  

Эта команда добавляет приложение realpython-example-app-staging в тот же конвейер и указывает, что это приложение должно использоваться для этапа staging .Это означает, что ваш конвейер теперь состоит из двух приложений:

  1. пример приложения Realpython
  2. Реалпайтон пример-приложение-постановка

Первая используется как производственная среда, а вторая - как промежуточная.

Развертывание и продвижение к стадии подготовки и производства

Теперь, когда у вас настроены ваши приложения и конвейер, вы можете использовать его для развертывания приложения в промежуточной среде, просмотра его там и затем продвижения в производственную среду.

Предположим, например, что вы хотите снова изменить сообщение, возвращаемое представлением index () . В этом случае вам нужно отредактировать app.py и изменить строку, возвращаемую index () . Следующий блок кода показывает новую версию:

  1 из колбы импортная колба
 2
 3app = Flask (__ name__)
 4
 [email protected] ("/")
 6def index ():
 7 return "Это еще одна версия!"
  

Как вы видите в строке 7, index () возвращает «Это еще одна версия!» Вы можете развернуть эту новую версию в своей промежуточной среде, выполнив следующие команды:

  $ git add app.ру
$ git commit -m "Еще одно изменение приветственного сообщения"
$ git push мастер постановки
  

Эти команды фиксируют app.py и отправляют изменения в промежуточный удаленный , запуская процесс сборки и развертывания для этой среды. Вы должны увидеть новую версию, развернутую по адресу https://realpython-example-app-staging.herokuapp.com/ . Обратите внимание, что в производственной среде все еще используется предыдущая версия.

Если вас устраивают изменения, вы можете продвигать новую версию в рабочую среду с помощью интерфейса командной строки Heroku:

  $ heroku pipelines: продвижение - удаленная постановка
  

Приведенная выше команда развертывает в производственной среде ту же версию, которая в настоящее время выполняется в промежуточном режиме.Как вы заметите, в этом случае этап сборки отсутствует, поскольку используется та же сборка из промежуточной стадии, которая развертывается в производственной среде. На странице https://realpython-example-app.herokuapp.com/ можно убедиться, что приложение продвигалось и что в нем установлена ​​последняя версия.

В этом разделе вы узнали о рабочем процессе развертывания и реализовали его в Heroku. Чтобы узнать больше о работе с конвейерами и более сложными рабочими процессами, ознакомьтесь с документацией по конвейерам Heroku.

Управление настройками и секретами для различных сред

Большинству приложений требуются разные настройки для каждой среды, например включение функций отладки или указание на другие базы данных.Некоторые из этих настроек, такие как учетные данные для аутентификации , пароли базы данных и ключи API , очень чувствительны, поэтому вам следует избегать их жесткого кодирования в файлах приложения.

Вы можете создать файл config.py для хранения нечувствительных значений конфигурации и чтения чувствительных из переменных среды . В следующем блоке кода вы можете увидеть исходный код для config.py :

  1 импорт ОС
 2
 Конфигурация 3-го класса:
 4 DEBUG = Ложь
 5 РАЗВИТИЕ = Неверно
 6 SECRET_KEY = os.getenv ("СЕКРЕТНЫЙ_КЛЮЧ", "это-ключ-по умолчанию")
 7
 8class ProductionConfig (Конфигурация):
 9 чел.
10
11 класс StagingConfig (Конфигурация):
12 DEBUG = True
13
14 класс DevelopmentConfig (Конфигурация):
15 ОТЛАДКА = Истина
16 РАЗВИТИЕ = Правда
  

Этот код объявляет класс Config , используемый в качестве основы для конфигурации каждой среды. Обратите внимание, что в строке 6 SECRET_KEY считывается из переменной среды с помощью os.getenv () . Это позволяет избежать раскрытия фактического ключа в исходном коде.В то же время вы можете настроить любой параметр для каждой среды.

Затем вам нужно изменить app.py , чтобы использовать другой класс конфигурации в зависимости от среды. Это полный исходный код app.py :

  1 импорт ОС
 2из флакона импортный флакон
 3
 4app = Flask (__ name__)
 5env_config = os.getenv ("APP_SETTINGS", "config.DevelopmentConfig")
 6app.config.from_object (env_config)
 7
 [email protected] ("/")
 9def index ():
10 secret_key = app.config.get ("СЕКРЕТНЫЙ_КЛЮЧ")
11 return f "Настроенный секретный ключ: {secret_key}".
  

В строках 5 и 6 конфигурация загружается из одного из ранее определенных классов в config.py . Конкретный класс конфигурации будет зависеть от значения, хранящегося в переменной среды APP_SETTINGS . Если переменная не определена, конфигурация по умолчанию вернется к DevelopmentConfig .

Примечание: В этом примере сообщение в строке 11 было изменено, чтобы показать SECRET_KEY , полученный приложением .config.get () . Обычно вы не показываете конфиденциальную информацию в своих ответах. Это просто пример, чтобы показать, как вы можете читать эти значения.

Теперь вы можете увидеть, как это работает локально, передав некоторые переменные среды при запуске приложения:

  $ SECRET_KEY = ключ-чтение-из-env-var колба запускается
  

Приведенная выше команда устанавливает переменную среды SECRET_KEY и запускает приложение. Если вы перейдете к http: // localhost: 5000 , вы должны увидеть сообщение Настроенный секретный ключ - это ключ-чтение-из-env-var .

Затем зафиксируйте изменения и отправьте их в промежуточную среду, выполнив следующие команды:

  $ git add app.py config.py
$ git commit -m "Добавить поддержку конфигурации"
$ git push мастер постановки
  

Эти команды фиксируют изменения в app.py и новом файле config.py в локальном репозитории Git, а затем отправляют их в промежуточную среду, что запускает процесс сборки и развертывания. Прежде чем продолжить, вы можете настроить переменные среды для этой среды с помощью Heroku CLI:

.
  $ heroku config: set --remote staging \
  SECRET_KEY = ключ-постановка \
  APP_SETTINGS = config.StagingConfig
  

Используя команду config: set , вы установили значение SECRET_KEY и APP_SETTINGS для постановки. Вы можете убедиться, что изменения были развернуты, перейдя на https://realpython-example-app-staging.herokuapp.com/ и убедившись, что на странице отображается сообщение . Настроенный секретный ключ - это staging-key .

Используя Heroku CLI, вы также можете получить значения переменных среды для любого приложения.Следующая команда получает все переменные среды, установленные для промежуточной среды из Heroku:

  $ heroku config - удаленная постановка
=== переменные конфигурации realpython-example-app-staging
APP_SETTINGS: config.StagingConfig
SECRET_KEY: ключ-постановка
  

Как видите, эти значения соответствуют ранее установленным.

Наконец, вы можете продвигать новую версию в производство с другими значениями конфигурации, используя Heroku CLI:

  $ heroku config: set --remote prod \
  SECRET_KEY = производственный ключ \
  APP_SETTINGS = config.ProductionConfig
$ heroku pipelines: продвижение - удаленная постановка
  

Первая команда устанавливает значения SECRET_KEY и APP_SETTINGS для производственной среды. Вторая команда продвигает новую версию приложения, содержащую файл config.py . Опять же, вы можете убедиться, что изменения были развернуты, перейдя на https://realpython-example-app.herokuapp.com/ и убедившись, что на странице отображается Настроенный секретный ключ - это производственный ключ .

В этом разделе вы узнали, как использовать разные конфигурации для каждой среды и как обрабатывать конфиденциальные настройки с помощью переменных среды. Помните, что в реальных приложениях не следует раскрывать конфиденциальную информацию, например SECRET_KEY .

Заключение

Поздравляю, теперь вы знаете, как создать веб-приложение с помощью Flask и как сделать его общедоступным, развернув его с помощью Heroku. Вы также знаете, как настроить различные среды, в которых вы, ваша команда и ваши клиенты могут просматривать приложение перед его публикацией.Хотя пример приложения, созданный в этом руководстве, очень мал, вы можете использовать его в качестве отправной точки для своего следующего проекта!

В этом руководстве вы узнали, как:

  • Создать пример веб-приложения Python Flask
  • Разверните веб-приложение с помощью Heroku
  • Реализовать рабочий процесс развертывания с использованием конвейеров Heroku
  • Безопасное управление конфигурацией и секретами для различных сред

Heroku предлагает множество функций, которые не рассматривались в предыдущих разделах, включая масштабирование, базы данных и многое другое.Посетите Центр разработки Heroku и документацию по платформе Heroku, чтобы узнать о других функциях, которые помогут вам ускорить разработку. Наконец, ознакомьтесь с серией руководств Flask by Example, чтобы узнать, как можно создать и развернуть более сложное приложение.

Вы можете щелкнуть ссылку ниже, чтобы получить полный исходный код для этого учебного приложения:

Как создать веб-приложение с помощью Flask и развернуть его в облаке

Сальвадор Вильялон

Введение

В каждом разделе я буду показывать фрагменты кода, чтобы вы могли следовать им.Весь код, использованный в руководстве, доступен в этом репозитории GitHub.

Что такое HTTP и какое отношение он имеет к Flask?

HTTP - это протокол для веб-сайтов. Интернет использует его для взаимодействия и связи с компьютерами и серверами. Позвольте мне привести пример того, как вы используете его каждый день.

Когда вы вводите имя веб-сайта в адресной строке браузера и нажимаете Enter. Что происходит, так это то, что HTTP-запрос был отправлен на сервер.

Например, когда я захожу в адресную строку и набираю google.com, затем нажмите Enter, HTTP-запрос отправляется на сервер Google. Сервер Google получает запрос и должен понять, как его интерпретировать. Сервер Google отправляет ответ HTTP, содержащий информацию, которую получает мой веб-браузер. Затем он отображает то, что вы просили, на странице в браузере.

Как задействован Flask?

Мы напишем код, который позаботится об обработке на стороне сервера. Наш код будет получать запросы. Он выяснит, с чем связаны эти запросы и о чем они спрашивают.Он также определит, какой ответ отправить пользователю.

Для всего этого воспользуемся Flask.

Что такое Flask?

Flask (Микрофреймворк Python)

Упрощает процесс разработки веб-приложения. Flask позволяет нам сфокусировать на том, что запрашивают пользователи и какой ответ дать.

Узнайте больше о микросхемах.

Как работает приложение Flask?

Код позволяет нам запускать базовое веб-приложение, которое мы можем обслуживать, как если бы это был веб-сайт.

  из колбы импортная колба

app = Flask (__ имя__)

@ app.route ("/")
def home ():
    return "Hello, World!"
    
если __name__ == "__main__":
    app.run (debug = True)  

Этот фрагмент кода хранится в нашем main.py.

Строка 1: Здесь мы импортируем модуль Flask и создаем веб-сервер Flask из модуля Flask.

Строка 3: __name__ означает текущий файл . В данном случае это будет main.py. Этот текущий файл будет представлять мое веб-приложение.

Мы создаем экземпляр класса Flask и называем его приложением. Здесь мы создаем новое веб-приложение.

Строка 5: Представляет страницу по умолчанию. Например, если я захожу на такой веб-сайт, как «google.com/», без косой черты. Тогда это будет страница Google по умолчанию.

Это то, что будет представлять @ app.route («/»).

Строка 6–7 : Когда пользователь переходит на мой веб-сайт и переходит на страницу по умолчанию (ничего после косой черты), функция ниже будет активируется.

Строка 9: Когда вы запускаете свой скрипт Python, Python при выполнении присваивает ему имя «__main__».

Если мы импортируем другой сценарий, оператор if предотвратит запуск других сценариев. Когда мы запускаем main.py, он меняет свое имя на __main__ и только после этого активируется оператор if.

Строка 10: Это запустит приложение. Наличие debug = True позволяет отображать возможные ошибки Python на веб-странице.Это поможет нам отследить ошибки.

Давайте попробуем запустить main.py

В терминале или командной строке перейдите в папку, содержащую ваш main.py. Затем выполните py main.py или python main.py . В терминале или в командной строке вы должны увидеть этот вывод.

Важная часть - это то, где говорится, что работает на http://127.0.0.1:5000/ .

127.0.0.1 означает этот локальный компьютер.Если вы не знаете, что это означает (как я не знал, когда начинал - эта статья действительно полезна), основная идея состоит в том, что 127.0.0.1 и localhost относятся к этому локальному компьютеру.

Перейдите по этому адресу, и вы увидите следующее:

Поздравляем! Вы создали сайт с помощью Flask!
Больше развлечений с Flask

Ранее вы видели, что произошло, когда мы запустили main.py с одним маршрутом, которым был app.route («/»).

Давайте добавим больше маршрутов, чтобы вы могли увидеть разницу.

  из колбы импортная колба

app = Flask (__ имя__)

@ app.route ("/")
def home ():
    return "Hello, World!"
    
@ app.route ("/ salvador")
def salvador ():
    return "Привет, Сальвадор"
    
если __name__ == "__main__":
    app.run (debug = True)  

В строках 9–11 . мы добавили новый маршрут, на этот раз / Сальвадор.

Теперь снова запустите main.py и перейдите по адресу http: // localhost: 5000 / salvador.

Пока что мы возвращаем текст.Давайте сделаем наш сайт лучше, добавив HTML и CSS.

HTML, CSS и виртуальные среды

HTML и шаблоны в Flask

Сначала создайте новый файл HTML. Я позвонил своему home.html.

Вот код для начала.

  

  
    
     Учебное пособие по Flask 
  
  
     

Моя первая попытка использовать Flask

Flask - это весело

Важное замечание

Flask Framework ищет файлы HTML в папке, называемой шаблонами . Вам необходимо создать папку шаблонов и поместить туда все свои HTML-файлы.

Не забывайте всегда держать main.py вне папки с шаблонами.

Теперь нам нужно изменить наш main.py, чтобы мы могли просматривать созданный HTML-файл.

  из Flask import Flask, render_template

app = Flask (__ имя__)

@ app.route ("/")
def home ():
    return render_template ("home.html")
    
@ app.route ("/ salvador")
def salvador ():
    return "Привет, Сальвадор"
    
если __name__ == "__main__":
    приложение.запустить (отладка = True)
  Мы внесли два новых изменения:  

Строка 1: Мы импортировали метод render_template () из фреймворка flask. render_template () ищет шаблон (файл HTML) в папке шаблонов. Затем он отобразит шаблон, о котором вы просите. Узнайте больше о функции render_templates ().

Строка 7: Мы изменяем return так, чтобы теперь он возвращал render_template («home.html») . Это позволит нам просмотреть наш HTML-файл.

Теперь посетите свой локальный хост и посмотрите изменения: http: // localhost: 5000 /.

Давайте добавим больше страниц

Давайте создадим about.html внутри папки шаблонов .

  

  
    
     О Flask 
  
  
     

О Flask

Flask - это микро-веб-фреймворк, написанный на Python.

Приложения, использующие фреймворк Flask, включают Pinterest, LinkedIn и веб-страница сообщества самого Flask.

Давайте внесем изменения, аналогичные тому, что мы делали раньше, с нашим main.py.

  из Flask import Flask, render_template

app = Flask (__ имя__)

@ app.route ("/")
def home ():
    return render_template ("home.html")
    
@ app.route ("/ о себе)
def about ():
    return render_template ("about.html")
    
если __name__ == "__main__":
    приложение.run (debug = True)  

Мы внесли три новых изменения:

Строка 9: Измените маршрут на "/ около " .

Строка 10: Измените функцию так, чтобы теперь она была def about ():

Строка 11: Измените возвращаемый результат так, чтобы теперь он возвращал render_template ("about.html") .

Теперь посмотрим на изменения: http: // localhost: 5000 / about.

Давайте соединим обе страницы с помощью навигации

Чтобы соединить обе страницы, у нас может быть меню навигации вверху.Мы можем использовать Flask, чтобы упростить процесс создания меню навигации.

Сначала создадим template.html. Этот template.html будет служить родительским шаблоном. Наши два дочерних шаблона унаследуют от него код.

  

 
   
    Родительский шаблон Flask 
   
 
 
    <заголовок>
      

Первое веб-приложение

{% блокировать содержание%} {% endblock%}

Строка 13–14: Мы используем функцию с именем url_for () . Он принимает имя функции в качестве аргумента. Прямо сейчас мы дали ему имя функции. Подробнее о функции url_for () .

Две строки с фигурными скобками будут заменены на содержимое home.html и about.html. Это будет в зависимости от URL-адреса, который просматривает пользователь.

Эти изменения позволяют дочерним страницам (home.html и about.html) подключаться к родительским (template.html). Это позволяет нам не копировать код для меню навигации в about.html и home.html.

Содержимое about.html:

  

  
    
     О Flask 
  
  
    {% extends "template.html"%}
    {% блокировать содержание%}
    
     

О Flask

Flask - это микро-веб-фреймворк, написанный на Python.

Приложения, использующие фреймворк Flask, включают Pinterest, LinkedIn и веб-страница сообщества самого Flask.

{% endblock%}

Содержимое home.html:

  

  
    
     Учебное пособие по Flask 
  
  
    {% extends "template.html"%}
    {% блокировать содержание%}
    
     

Моя первая попытка использовать Flask

Flask - это весело

{% endblock%}

Давайте попробуем добавить CSS.

Добавление CSS на наш веб-сайт

Важное примечание, о котором следует помнить

Точно так же, как мы создали папку с именем templates для хранения всех наших HTML-шаблонов, нам нужна папка с именем static .

В static мы будем хранить наши CSS, JavaScript, изображения и другие необходимые файлы. Вот почему важно, чтобы вы создали папку CSS для хранения ваших таблиц стилей. После этого папка вашего проекта должна выглядеть так:

Связывание нашего CSS с нашим файлом HTML

Наш шаблон.html - это тот, который связывает все страницы. Мы можем вставить здесь код, и он будет применим ко всем дочерним страницам.

  

  
    
     Родительский шаблон Flask 
    
    
    

  
    <заголовок>
      

Первое веб-приложение

{% блокировать содержание%} {% endblock%}

Строка 7: Здесь мы указываем путь, где находится шаблон.css находится.

Теперь посмотрим на изменения: http: // localhost: 5000 / about.

Движение вперед с Flask и virtualenv

Теперь, когда вы знакомы с Flask, вы можете начать использовать его в своих будущих проектах. Всегда нужно использовать virtualenv.

Зачем использовать virtualenv?

Вы можете использовать Python для других проектов, помимо веб-разработки.

В ваших проектах могут быть установлены разные версии Python, разные зависимости и пакеты.

Мы используем virtualenv для создания изолированной среды для вашего проекта Python. Это означает, что каждый проект может иметь свои собственные зависимости независимо от того, какие зависимости есть у каждого другого проекта.

Начало работы с virtualenv

Сначала запустите эту команду в командной строке или терминале:

  pip install virtualenv  

Во-вторых, сделайте следующее:

  virtualenv «имя виртуальной среды»  

Здесь вы может дать имя окружающей среде.Я обычно называю его виртуальным. Это будет выглядеть так: virtualenv virtual .

После настройки виртуальной среды проверьте папку проекта. Должно получиться вот так. Виртуальную среду необходимо создать в том же каталоге , где находятся файлы вашего приложения.

Как выглядит каталог

Активация виртуальной среды

Теперь перейдите в терминал или в командную строку. Перейдите в каталог, содержащий файл с именем activate. Файл под названием activate находится внутри папки под названием Scripts для Windows и bin для OS X и Linux.

Для OS X и Linux Environment:

  $ имя виртуальной среды / bin / activate  

Для среды Windows:

  имя виртуальной среды \ Scripts \ activate  

Так как я использую машину Windows , когда я активирую среду, она будет выглядеть так:

Вы должны увидеть это в начале строки командной строки.

Следующим шагом будет установка flask в вашей виртуальной среде, чтобы мы могли запустить приложение внутри нашей среды.Выполните команду:

  pip install flask  

Запустите приложение и перейдите по адресу http: // localhost: 5000/

Наконец-то мы создали наше веб-приложение. Теперь мы хотим показать всему миру наш проект.

(Более подробную информацию о virtualenv можно найти в следующих руководствах по virtualenv и официальной документации Flask)

Давайте отправим его в облако

Чтобы показать другим проект, который мы создали, нам нужно будет научиться использовать облачные службы.

Разверните свое веб-приложение в облаке

Для развертывания нашего веб-приложения в облаке мы будем использовать Google App Engine (стандартная среда).Это пример платформы как услуга (PaaS).

PaaS относится к доставке операционных систем и связанных услуг через Интернет без загрузки или установки . Такой подход позволяет клиентам создавать и развертывать приложения без необходимости вкладывать средства в базовую инфраструктуру (дополнительную информацию о PaaS см. В TechTarget).

Google App Engine - это платформа как услуга, которая позволяет разработчикам и компаниям создавать и запускать приложения с использованием передовой инфраструктуры Google - TechOpedia.
Перед тем, как начать:

Вам понадобится учетная запись Google . После создания учетной записи перейдите в консоль Google Cloud Platform и создайте новый проект. Также вам необходимо установить Google Cloud SDK.

В конце этого руководства структура вашего проекта будет выглядеть следующим образом.

Структура папки проекта

Нам нужно будет создать три новых файла: app.yaml, appengine_config.py и requirements.txt.

Содержимое app.yaml:

  время выполнения: python27
api_version: 1
потокобезопасный: правда

обработчики:
- url: / static
  static_dir: статический
- url: /.*
  скрипт: main.app
  
библиотеки:
  - имя: ssl
    версия: latest  

Если вы заглянули в учебник Google в той части, где говорится о содержании app.yaml , то в нем не будет раздела, где я писал о библиотеках.

Когда я впервые попытался развернуть свое простое веб-приложение, мое развертывание не сработало. После многих попыток я узнал, что нам нужно включить библиотеку SSL.

Библиотека SSL позволяет нам создавать безопасные соединения между клиентом и сервером.Каждый раз, когда пользователь переходит на наш веб-сайт, ему необходимо подключиться к серверу, работающему под управлением Google App Engine. Для этого нам нужно создать безопасное соединение. (Я недавно узнал об этом, поэтому, если у вас есть предложения по этому поводу, дайте мне знать!)

Содержимое appengine_config.py:

  от поставщика импорта google.appengine.ext

# Добавить любые библиотеки, установленные в папке "lib".
vendor.add ('lib')  

Содержимое файла requirements.txt:

  Flask
Werkzeug  

Теперь внутри нашей виртуальной среды (убедитесь, что ваш virtualenv активирован) , мы собираемся установить новые зависимости, которые у нас есть в требованиях.текст. Выполните эту команду:

  pip install -t lib -r requirements.txt  

-t lib: Этот флаг копирует библиотеки в папку lib, которая загружается в App Engine во время развертывания.

-r requirements.txt: Указывает pip на установку всего из файла requirements.txt.

Развертывание приложения

Чтобы развернуть приложение в Google App Engine, используйте эту команду.

  gcloud app deploy  

Я обычно включаю - проект [ID проекта]

Здесь указывается, какой проект вы развертываете.Команда будет выглядеть так:

  gcloud app deploy --project [ID проекта]  

Приложение

Теперь проверьте URL-адрес вашего приложения. Приложение будет храниться следующим образом:

  «идентификатор вашего проекта» .appspot.com  

Мое приложение находится здесь: http://sal-flask-tutorial.appspot.com

Заключение

Отсюда В этом руководстве вы все узнали, как:

  • Используйте фреймворк Flask для использования Python в качестве языка на стороне сервера.
  • Научился использовать HTML, CSS и Flask для создания веб-сайтов.
  • Научился создавать виртуальные среды с помощью virtualenv.
  • Используйте стандартную среду Google App Engine для развертывания приложения в облаке.
Что я узнал

Я узнал три важных вещи из этого небольшого проекта.

Во-первых, я узнал о разнице между статическим веб-сайтом и веб-приложением.

Статические веб-сайты:

  • Означает, что сервер обслуживает файлы HTML, CSS и JavaScript для клиента.Контент сайта не меняется при взаимодействии с ним пользователя.

Веб-приложения:

  • Веб-приложение или динамический веб-сайт генерирует контент на основе полученных данных (в большинстве случаев это база данных), которая изменяется в зависимости от взаимодействия пользователя с сайтом. В веб-приложении сервер отвечает за запросы, получение и обновление данных. Это приводит к тому, что веб-приложения работают медленнее и труднее развертываются, чем статические веб-сайты для простых приложений (Reddit).

Сторона сервера и сторона клиента:

  • Я узнал, что веб-приложение имеет две стороны. На стороне клиента и на стороне сервера. Клиентская сторона - это то, с чем взаимодействует пользователь, а на стороне сервера обрабатывается вся введенная пользователем информация.

Во-вторых, я узнал об облачных сервисах

Большинство моих предыдущих проектов были статическими веб-сайтами, и для их развертывания я использовал страницы GitHub. GitHub Pages - это бесплатная служба хостинга статических сайтов, предназначенная для размещения проектов из репозитория GitHub.

При работе с веб-приложениями я не мог использовать GitHub Pages для их размещения. GitHub Pages предназначен только для статических веб-сайтов, а не для чего-то динамического, например веб-приложения, для которого требуется сервер и база данных. Мне пришлось использовать облачные сервисы, такие как Amazon Web Services или Heroku

В-третьих, я научился использовать Python в качестве серверного языка

Для создания серверной части веб-приложения нам пришлось использовать серверный язык. Я узнал, что могу использовать фреймворк Flask для использования Python в качестве серверного языка.

Следующие шаги:

С помощью Flask можно создавать все, что угодно. Я понял, что Flask помогает облегчить чтение кода веб-сайта. Этим летом 2018 года я подал следующие заявки и надеюсь сделать больше.

Персональные проекты

Во время стажировки

Вот список ресурсов, которые помогли мне создать это руководство:

  • «App Engine - создание масштабируемых веб- и мобильных серверных модулей на любом языке | App Engine | Google Cloud.» Google , Google, cloud.google.com/appengine/.
  • «Создание веб-сайта с помощью Python Flask». PythonHow , pythonhow.com/building-a-website-with-python-flask/.
  • «Flask - Лекция 2 - Веб-программирование CS50 с помощью Python и JavaScript». YouTube , 6 февраля 2018 г., youtu.be/j5wysXqaIV8.
  • «Начало работы с Flask в стандартной среде App Engine | Стандартная среда App Engine для Python | Google Cloud ». Google , Google, облако.google.com/appengine/docs/standard/python/getting-started/python-standard-env.
  • «Установка». Добро пожаловать | Flask (микрофреймворк Python) , flask.pocoo.org/docs/0.12/installation/.
  • «Python - бесплатное развертывание статических сайтов Flask на страницах Github». Reddit , www.reddit.com/r/Python/comments/1iewqt/deploying_static_flask_sites_for_free_on_github/.
  • Настоящий Python. «Виртуальные среды Python: учебник - настоящий Python». Настоящий Python , Настоящий Python, 7 авг.2018 г., realpython.com/python-virtual-environments-a-primer/.
  • «Что такое облачные сервисы? - Определение с сайта WhatIs.com ». SearchITChannel , searchitchannel.techtarget.com/definition/cloud-services.
  • «Что такое Google App Engine (GAE)? - Определение из Техопедии ». Techopedia.com , www.techopedia.com/definition/31267/google-app-engine-gae.

Если у вас есть предложения или вопросы, не стесняйтесь оставлять комментарии.

Как создать веб-приложение с помощью Flask на Python | Харшита Гупта | Uneritx

Python Flask Framework

Flask - это микро-веб-фреймворк, написанный на Python, который предоставляет полезные инструменты и функции, упрощающие создание веб-приложений на Python.Это дает разработчикам гибкость и является более доступным фреймворком для новых разработчиков.

Flask использует шаблоны Jinja для динамического создания HTML-страниц с использованием знакомых концепций Python, таких как переменные, циклы, списки и т. Д.

Давайте создадим отдельную папку и инициализируем в ней нашу собственную виртуальную среду.

Я буду называть этот каталог flaskblog, так как это имя приложения:

 $ mkdir flaskblog 
$ cd flaskblog

Поддержка виртуальных сред включена во все последние версии Python, поэтому все, что вам нужно, Чтобы создать его, выполните следующие действия:

 $ python3 -m venv dev 

Теперь вам нужно сообщить системе, что вы хотите использовать эту виртуальную среду, и вы делаете это, активируя ее .

 $ source dev / bin / activate 
(dev) $ _

Теперь, когда у вас создана и активирована виртуальная среда, вы можете, наконец, установить в нее Flask:

 (dev) $ pip install flask 

В вашем flaskblog , откройте файл с именем app.py для редактирования, используйте nano или ваш любимый текстовый редактор:

 (dev) $ nano app.py 

Этот файл app.py будет служить минимальный пример того, как обрабатывать HTTP-запросы.Внутри него вы импортируете объект Flask и создадите функцию, возвращающую HTTP-ответ.

 из импорта фляги Flaskapp = Flask (__ name __) @ app.route ('/') 
def hello ():
return 'Hello, Uneritx!' If __name __ == '__ main__':
app.run ()

Чтобы запустить веб-приложение, вы сначала сообщите Flask, где найти приложение (файл app.py в вашем случае) с помощью переменной среды FLASK_APP :

 (dev) $ export Flask_APP = app.py 

запустите приложение, используя команду flask run :

 (dev) $ flask run 
* Обслуживающее приложение Flask 'microblog.py' (ленивая загрузка)
* Среда: production
ПРЕДУПРЕЖДЕНИЕ. Это сервер разработки. Не используйте его в производственном развертывании.
Вместо этого используйте производственный сервер WSGI.
* Режим отладки: выключен
* Запуск на http://127.0.0.1:5000/ (нажмите CTRL + C для выхода)

В настоящее время ваше приложение отображает только простое сообщение без HTML.

Flask предоставляет вспомогательную функцию render_template () , которая позволяет использовать шаблоны Jinja. Это значительно упростит управление HTML за счет написания HTML-кода в файлах .html , а также использования логики в HTML-коде

На этом шаге вы создадите свое основное приложение Flask в новом файле.

 (dev) $ nano app.py 

В этом новом файле вы импортируете объект Flask для создания экземпляра приложения Flask, как вы это делали ранее.Вы также импортируете вспомогательную функцию render_template () , которая позволяет отображать файлы шаблонов HTML, существующие в папке templates , которую вы собираетесь создать. Файл будет иметь единственную функцию просмотра, которая будет отвечать за обработку запросов к основному маршруту /.

 из флакона import Flask, request, render_template 
app = Flask (__ name __) @ app.route ('/', methods = ["GET", "POST"])
def index ():
if request.method = = "POST":
# получение ввода с именем = fname в форме HTML
fname = request.form.get ("fname")
# получение ввода с name = lname в форме HTML
lname = request.form.get ("lname")
return "Welcome to Uneritx" + fname + "" + lname
return render_template ( "index.jinja2") if __name __ == '__ main__':
app.run ()

Функция представления index () возвращает результат вызова render_template () с index.html в качестве аргумента, это сообщает render_template () искать файл с именем index.jinja2 в папке шаблонов .

теперь создайте каталог с именем templates внутри вашего каталога flaskblog . Затем в нем откройте файл с именем index.jinja2

 (dev) $ mkdir templates 
(dev) $ cd templates
(dev) templates $ nano index.jinja2

Затем добавьте следующий HTML-код в индекс .jinja2 :

  





Document

{% block content%}



теперь сохраните и выйдите этот файл.

запустите приложение с помощью команды flask run :

 (dev) $ flask run 
* Обслуживающее приложение Flask 'microblog.py' (отложенная загрузка)
* Среда: production
ПРЕДУПРЕЖДЕНИЕ. Это сервер разработки. Не используйте его в производственном развертывании.
Вместо этого используйте производственный сервер WSGI.
* Режим отладки: выключен
* Запуск на http://127.0.0.1:5000/ (нажмите CTRL + C для выхода)

при запуске «http://127.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *