Flask
Введение | |
Установка | |
«Hello World!» | |
Простейший веб-сервер | |
Свои сообщения в лог | |
Другие статьи о Flask |
Введение
Flask — фреймворк для создания веб-приложений на языке программирования Python,
использующий набор инструментов Werkzeug, а также шаблонизатор Jinja2.
Относится к категории так называемых микрофреймворков — минималистичных каркасов
веб-приложений, сознательно предоставляющих лишь самые базовые возможности.
Поддерживается установка посредством пакетного менеджера PyPI, версия 1.0 совместима
с Python 2.7, Python 3.3 и выше.
Создатель и основной автор — австрийский программист Армин Ронахер, начал работу
над проектом в 2010 году.
Установка Flask
Установка Flask зависит от Вашего окружения. Если Вы работаете в IDE типа PyCharm, виртуальное окружение для
Вашего проекта уже создано (см.
здесь
).
Если Вы в «чистой» коносли, то обязательно создайте виртуальное окружение для проекта на
Flask. О том как это сделать вы можете прочитать в цикле статей
«Виртуальное окружение в Python»
Предполагается, что Python, Pip и virtualenv уже установлены.
Создайте новое виртуальное окружение, активируйте его и в нём выполните
python -m pip install flask
Hello World
По умолчанию Flask отвечает на GET.
Создадим файл server.py со следующим кодом
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
@app.route("/") - это декоратор прочитать про декораторы с параметром можно здесь
Не называйте свой файл flask.py это приведёт к ошибке .
Если Вы видите мануал без указания метода имейте в виду, что либо отвечать будет только на GET, либо автор изменил настройки по умолчанию.
Запустить файл server.py можно будет командой
python server.py
Но традиционно испльзуется flask run, про который я расскажу в уроке «Первый проект на Flask» .
Если в Вашем окружении установлен Flask то Вы увидите
* Serving Flask app "server" (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
Можете открыть браузер и ввести в строку поиска http://127.0.0.1:5000/
На экране должно появиться
Hello Flask!
А в консоли должно появиться
127.0.0.1 - - [15/Jun/2020 16:19:06] "GET / HTTP/1.1" 200 - 127.0.0.1 - - [15/Jun/2020 16:19:07] "GET /favicon.ico HTTP/1.1" 404 -
404 - так как я не добавил файл favicon.ico
Простой вебсервер на Flask
Создать такой элементарный сервер, который будет что-то отвечать на запросы бывает
полезно, когда Вам нужно быстро протестировать приложение, которое прежде
чем послать какую-то важную информацию запрашивает состояние сервера.
Вы можете ответить 200 и дальше слушать что присылает приложение.
Аналогичный функционал можно реализовать огромным количеством способов,
например с помощью
Soap UI
from flask import request
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return 'Hello world'
@app.route("/bestws")
def cakes():
return 'HeiHei.ru!'
@app.route("/heiheiru/holidays", methods = ['GET'])
def heiheiru_holidays():
timestamp = request.args.get('timestamp')
print(f"Кто-то сделал GET запрос на heihei.ru и передал время {timestamp}")
return '200'
@app.route("/heiheiru/fests", methods = ['GET','PUT', 'POST'])
def heiheiru_fests():
epc = request.args.get('epc')
print(epc)
antenna = request.args.get('antenna')
print(antenna)
timestamp = request.args.get('timestamp')
print(timestamp)
userMemory = request.args.get('userMemory')
print(userMemory)
return '200'
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')
Свои сообщения в лог
Добавить свои сообщения в лог Flask можно с помощью
logger
и current_app.
current_app особенно пригодится для работы с
blueprint
import logging from flask import current_app current_app.logger.warn("Custom Log")
Передать переменную в шаблон
Чтобы передать переменную в шаблон, достаточно указать её как аргумент в render_template()
@bp.route("/") def index(): return render_template( "monitor/index.html", stat=db )
Чтобы использовать её в шаблоне нужны двойные фигурные скобки
{{ stat }}
Или, например, в цикле
{% for s in stat %} <li> {{ s.timestamp }} {{ s.status }} {% endfor %}
РЕКЛАМА от Яндекса. Может быть недоступна в вашем регионе
Конец рекламы. Если там пусто считайте это рекламой моей телеги