Flask.Flask: примеры (PYTHON)

Использование функции Flask для создания веб-приложений
Раздел: Веб-фреймворки, Микрофреймворк
flask.Flask(import_name: str, static_url_path: str=None, static_folder: str='static', static_host: str=None, host_matching: bool=False, subdomain_matching: bool=False, template_folder: str='templates', instance_path: str=None, instance_relative_config: bool=False, ro): flask.Flask

Функция Flask и её аргументы

Функция Flask является конструктором основного объекта приложения в микрофреймворке Flask для Python. Она создаёт экземпляр веб-приложения WSGI.

Функция применяется как отправная точка для любого проекта на Flask. Она инициализирует приложение с заданными параметрами.

Основные аргументы функции:

  • import_name (обязательный): Имя модуля или пакета приложения. Обычно передаётся __name__, чтобы Flask мог определить расположение ресурсов.
  • static_url_path: Определяет URL-путь для статических файлов. По умолчанию используется None, тогда используется значение static_folder.
  • static_folder: Имя папки со статическими файлами относительно корня приложения. По умолчанию 'static'.
  • static_host: Хост для обслуживания статических файлов при использовании CDN.
  • template_folder: Имя папки с шаблонами. По умолчанию 'templates'.
  • instance_path: Альтернативный путь к папке экземпляра приложения.
  • instance_relative_config: Если True, конфигурационные файлы загружаются относительно папки экземпляра.
  • root_path: Абсолютный путь к корневой директории приложения. По умолчанию определяется автоматически.

Функция возвращает экземпляр класса Flask, который представляет WSGI-приложение.

Базовые примеры использования

Минимальное приложение на Flask:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return 'Привет, мир!'

if __name__ == '__main__':
    app.run()
# Сервер запускается на http://127.0.0.1:5000
# При переходе по корневому URL отображается 'Привет, мир!'

Приложение с изменёнными путями к статике и шаблонам:

app = Flask(__name__, 
           static_folder='assets', 
           static_url_path='/static-assets',
           template_folder='views')
# Статические файлы теперь ищутся в папке 'assets' и доступны по URL /static-assets/
# Шаблоны загружаются из папки 'views'

Похожие инструменты в Python

В Python существуют другие фреймворки для создания веб-приложений.

  • Django: Монолитный фреймворк с готовой структурой и ORM. Выбор для крупных проектов, где важна стандартизация.
  • FastAPI: Современный асинхронный фреймворк для создания API с автоматической документацией. Подходит для высоконагруженных API.
  • Bottle: Ещё более минималистичный фреймворк в виде одного модуля. Используется для очень простых задач или скриптов.
  • Quart: Асинхронная версия Flask, работающая на основе ASGI. Применяется, когда требуется асинхронная обработка запросов.

Flask остаётся предпочтительным для проектов средней сложности, микросервисов и когда необходим полный контроль над компонентами.

Альтернативы в других языках

JavaScript (Node.js): Express.js - минималистичный фреймворк, аналогичный Flask по философии.

const express = require('express');
const app = express();
app.get('/', (req, res) => {
  res.send('Hello World');
});
app.listen(3000);

PHP: Slim - микрофреймворк с похожим синтаксисом.

$app = new \Slim\Slim();
$app->get('/', function () {
    echo 'Hello World';
});
$app->run();

Java: Spark - вдохновлённый Sinatra (как и Flask) фреймворк для Java.

import static spark.Spark.*;
get("/", (req, res) -> "Hello World");

Golang: Gin - быстрый веб-фреймворк с минималистичным API.

package main
import "github.com/gin-gonic/gin"
func main() {
    r := gin.Default()
    r.GET("/", func(c *gin.Context) {
        c.String(200, "Hello World")
    })
    r.Run()
}

Ключевое отличие Flask от многих аналогов - его экосистема расширений и простота для новичков.

Типичные ошибки

1. Использование некорректного имени для import_name.

app = Flask('myapp')  # Если модуль запущен не напрямую, могут быть проблемы с путями.
# Правильнее в большинстве случаев использовать __name__.
app = Flask(__name__)

2. Попытка запустить приложение без определения маршрутов или точки входа.

app = Flask(__name__)
# Забыли добавить @app.route('/')
# Запуск app.run() без маршрутов вызовет ошибку 404 при обращении к серверу.

3. Конфликты путей при кастомизации static_folder и static_url_path.

app = Flask(__name__, static_folder='static', static_url_path='/static')
# Если папка 'static' находится не в корне проекта, файлы не будут найдены.

Изменения в новых версиях

В версии Flask 2.0 были внесены значительные изменения:

  • Добавлена поддержка асинхронных представлений и обработчиков ошибок.
  • Упрощён синтаксис декораторов маршрутов, например, @app.get('/').
  • Улучшена интеграция с типизацией (аннотациями типов).
  • В версии 2.2 устарел параметр static_host, вместо него рекомендуется использовать app.static_url_path.
  • В версии 2.3 добавлены более строгие настройки безопасности по умолчанию для файлов cookie сессий.

Рекомендуется использовать актуальную версию Flask для получения новых функций и исправлений безопасности.

Расширенные примеры

Создание приложения с конфигурацией из объекта:

Пример python
class Config:
    SECRET_KEY = 'secret'
    DEBUG = True

app = Flask(__name__)
app.config.from_object(Config)

Использование фабрики приложений для создания нескольких экземпляров:

Пример python
def create_app(config_filename=None):
    app = Flask(__name__, instance_relative_config=True)
    app.config.from_pyfile(config_filename) if config_filename else None
    return app

app1 = create_app('config1.py')
app2 = create_app('config2.py')

Приложение с обслуживанием статики из другого домена (CDN):

Пример python
app = Flask(__name__, static_host='https://cdn.example.com')
# Генерирует URL для статики с указанным хостом.

Использование root_path для запуска приложения из нестандартного расположения:

Пример python
import os
project_root = os.path.dirname(os.path.abspath(__file__))
app = Flask(__name__, root_path=project_root)

Создание приложения с синглтон-паттерном через instance_path:

Пример python
app = Flask(__name__, 
           instance_path='/var/www/app-instance',
           instance_relative_config=True)
app.config.from_pyfile('application.cfg', silent=True)

Эти примеры демонстрируют гибкость функции Flask при построении сложных конфигураций.

питон flask.Flask function comments

En
Flask.Flask Create a Flask application instance