Flask — бесплатный фреймворк для создания веб-приложений на языке программирования Python, использующий набор инструментов Werkzeug, а также шаблонизатор Jinja2. Относится к категории так называемых микрофреймворков — минималистичных каркасов веб-приложений, сознательно предоставляющих лишь базовые возможности.
По умолчанию сервер обрабатывает PHP-скрипты. Для запуска Python-приложений, выберите uWSGI в качестве веб-сервера для домена в разделе «Сайты» → «Веб-серверы» Панели управления. Чтобы установить и настроить фреймворк, подключитесь к серверу по SSH.
В uWSGI уже включены основные модули, но для запуска Flask требуются дополнительные. Чтобы устанавливать модули в рамках аккаунта, настройте виртуальное окружение для Python.
Установка и настройка Flask
Выполните команду pip для установки фреймворка:
(python) [username@server ~]$ pip install Flask
В отличие от другого популярного фреймворка Django, для Flask не нужно создавать отдельный проект. Чтобы создать простейшее приложение на Flask, перейдите в корневую директорию вашего сайта
(python) [username@server]$ cd domains/domain.ru/public_html/
и создайте основной файл вашего приложения — myapp.py. Это можно сделать с помощью файлового менеджера в Панели управления или воспользовавшись текстовым редактором vim:
(python) [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:
(python) [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.
Настройте выполнение скриптов на Python, добавив правила в файл .htaccess.
Перейдите на сайт в браузере. Если всё сделано верно, на сайте отобразится следующее:
Дополнительные особенности
Предыдущей инструкции будет достаточно для запуска простейшего приложения на Flask, однако воспользоваться возможностями шаблонизатора Jinja2 не удастся, и выводить HTML-код нужно будет средствами самого приложения, например:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return "<center><h1>HelloWorld</h1></center>
<br/><h3>Hello Again!<h3>"
if __name__ == '__main__':
app.run()
В большинстве случаев, когда приложение уже достаточно объёмное, подобный вывод страницы нежелателен: такой код сложно читать, поддерживать и обновлять. Решить это можно с помощью HTML-шаблонов.
Чтобы ознакомиться с ними подробнее, установите дополнительный модуль:
(python) [username@server public_html]$ pip install flask-wikimediaui
Создайте директорию templates и перейдите в нее:
(python) [username@server public_html]$ mkdir templates
(python) [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>
Теперь их можно использовать в нашем приложении. Вернитесь в предыдущую директорию
(python) [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()
Если все настроено верно, при переходе на сайт отобразится страница:
Полезные ссылки
Если у вас возникли сложности в процессе установки фреймворка, обратитесь в нашу службу поддержки.