Искать в Базе знаний

Flask

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.
Настройте выполнение скриптов на Python, добавив правила в файл .htaccess.
Перейдите на сайт в браузере. Если всё сделано верно, на сайте отобразится следующее:
content-image

Дополнительные особенности

Предыдущей инструкции будет достаточно для запуска простейшего приложения на 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()
Если все настроено верно, при переходе на сайт отобразится страница:
content-image
Если у вас возникли сложности в процессе установки фреймворка, обратитесь в нашу службу поддержки.

2005–2025 ООО «СПРИНТХОСТ.РУ»
Входит в Реестр аккредитованных ИТ-компаний
и Реестр провайдеров хостинга
Лицензия №162552