База знаний

Инструкции и ответы на вопросы о хостинге, работе сайтов и приложений

Flask

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()

Если все настроено верно, при переходе на сайт отобразится страница:

Полезные ссылки

Если у вас возникли сложности в процессе установки фреймворка, обратитесь в нашу службу поддержки.


Была ли эта инструкция полезной?