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 %}