Flask — бесплатный фреймворк для создания веб-приложений на языке программирования
Python, использующий набор инструментов Werkzeug, а также шаблонизатор Jinja2. Относится к категории так называемых микрофреймворков — минималистичных каркасов веб-приложений, сознательно предоставляющих лишь базовые возможности.
По умолчанию сервер обрабатывает PHP-скрипты. Для запуска Python-приложений, выберите uWSGI в качестве веб-сервера для домена в разделе «Сайты» → «Веб-серверы» Панели управления. Чтобы установить и настроить фреймворк, подключитесь к серверу по
SSH.
В uWSGI уже включены основные модули, но для запуска Flask требуются дополнительные. Чтобы устанавливать модули в рамках аккаунта,
настройте виртуальное окружение для Python.
Установка и настройка Flask
Выполните команду pip для установки фреймворка:
[username@server ~]$ pip install Flask
В отличие от другого популярного фреймворка Django, для Flask не нужно создавать отдельный проект. Чтобы создать простейшее приложение на Flask, перейдите в
корневую директорию вашего сайта
[username@server]$ cd domains/domain.ru/public_html/
и создайте основной файл вашего приложения — myapp.py. Это можно сделать с помощью файлового менеджера в Панели управления или воспользовавшись текстовым редактором vim:
[username@server public_html]$ vim myapp.py
Наполните его следующим содержимым (пример скопирован с официального сайта проекта):
from flask import Flask app = Flask(__name__) # Раскомментировать для получения traceback # app.debug = True @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run()
Теперь создайте файл входа в приложение — site.wsgi с помощью файлового менеджера в Панели управления или с помощью vim:
[username@server public_html]$ vim site.wsgi
Содержимое site.wsgi:
import os, sys activate_this = '/home/username/python/bin/activate_this.py' with open(activate_this) as f: exec(f.read(), {'__file__': activate_this}) sys.path.insert(0, os.path.join('/home/username/domains/domain.ru/public_html/')) from myapp import app as application if __name__ == "__main__": application.run()
Из-за особенностей работы mod_wsgi, который используется для обработки запросов к сайту на Python, необходимо указывать именно application.run(). В противном случае при обращении к сайту возникнет ошибка 404. Учитывайте это, если возникнет необходимость отредактировать site.wsgi.
Перейдите на сайт в браузере. Если всё сделано верно, на сайте отобразится следующее:

Дополнительные особенности
Предыдущей инструкции будет достаточно для запуска простейшего приложения на Flask, однако воспользоваться возможностями шаблонизатора Jinja2 не удастся, и выводить HTML-код нужно будет средствами самого приложения, например:
from flask import Flask app = Flask(__name__) # Раскомментировать для получения traceback # app.debug = True @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run()
В большинстве случаев, когда приложение уже достаточно объёмное, подобный вывод страницы нежелателен: такой код сложно читать, поддерживать и обновлять. Решить это можно с помощью HTML-шаблонов.
Чтобы ознакомиться с ними подробнее, установите дополнительный модуль:
[username@server public_html]$ pip install flask-wikimediaui
Создайте директорию templates и перейдите в нее:
[username@server public_html]$ mkdir templates
[username@server public_html]$ cd templates
Первый шаблон — home.html — задаст содержимое домашней страницы. Создайте файл и наполните его содержимым:
{% extends "layout.html" %} {% block content %} <div> <h1>Python Web Server</h1> <h2>Using Flask and Jinja2</h2> </div> {% endblock %}
Второй файл — layout.html — станет шаблоном, задающим структуру всех html-страниц:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>{% block title %}Simple Flask App{% endblock %}</title> {% block head %} {% endblock %} </head> <body> {% block content %}{% endblock %} </body> </html>
Теперь их можно использовать в нашем приложении. Вернитесь в предыдущую директорию
[username@server templates]$ cd ..
и замените содержимое файла myapp.py, добавив в него путь к созданному шаблону:
from flask import Flask, render_template app = Flask(__name__) @app.route('/') def home(): return render_template('home.html') if __name__ == '__main__': app.run()
Если все настроено верно, при переходе на сайт отобразится страница:
