Flask.Flask: примеры (PYTHON)
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 для получения новых функций и исправлений безопасности.
Расширенные примеры
Создание приложения с конфигурацией из объекта:
class Config:
SECRET_KEY = 'secret'
DEBUG = True
app = Flask(__name__)
app.config.from_object(Config)Использование фабрики приложений для создания нескольких экземпляров:
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):
app = Flask(__name__, static_host='https://cdn.example.com')
# Генерирует URL для статики с указанным хостом.Использование root_path для запуска приложения из нестандартного расположения:
import os
project_root = os.path.dirname(os.path.abspath(__file__))
app = Flask(__name__, root_path=project_root)Создание приложения с синглтон-паттерном через instance_path:
app = Flask(__name__,
instance_path='/var/www/app-instance',
instance_relative_config=True)
app.config.from_pyfile('application.cfg', silent=True)Эти примеры демонстрируют гибкость функции Flask при построении сложных конфигураций.