Flask API служебных функций и классов

Flask предоставляет набор глобально доступных функций для типичных операций, таких как генерация URL, завершение запросов и построение ответов.

Все пройденоfrom flask import ...Импорт.


Глобальный прокси-объект

Object Type Описание
current_app Прокси → Flask Указывает на текущий активный экземпляр приложения Flask. Доступен в контексте приложения.

URL и перенаправления.

Функция Сигнатура Описание
url_for (endpoint, *, _anchor, _method, _scheme, _external, **values) Сгенерировать URL на основе имени функции представления. _external=True генерирует абсолютный URL.
redirect (location, code=303, Response=None) Создать ответ перенаправления. Код по умолчанию — 303 (See Other).

Завершение запроса и построение ответа.

Функция Сигнатура Описание
abort (code, *args, **kwargs) Немедленно завершить запрос и вернуть ошибку HTTP. code — код состояния, description — описание.
make_response (*) Преобразовать возвращаемое значение представления в объект Response. Если аргументов несколько, они обрабатываются как кортеж.
after_this_request (func) Регистрирует функцию, которая будет выполнена только один раз после текущего запроса. Используется для динамического добавления after_request.

Проверка контекста

Функция Описание
has_request_context() Возвращает True, если имеется активный контекст запроса.
has_app_context() Возвращает True, если имеется активный контекст приложения.
copy_current_request_context(func) Декоратор. Копирует текущий контекст запроса, чтобы декорированная функция могла по-прежнему обращаться к request, g и т. д. при выполнении вне контекста.

Отправка файлов

Функция Сигнатура Описание
send_file (path_or_file, mimetype, as_attachment, download_name, conditional, etag, last_modified, max_age) Отправляет содержимое файла. as_attachment=True запускает скачивание. Поддерживает условные запросы и ETag.
send_from_directory (directory, path, **kwargs) Безопасно отправляет файлы из указанного каталога. Использует safe_join для предотвращения атак с обходом пути.

Примеры кода

Пример

from flask import (Flask, current_app, url_for, redirect,
                   abort, make_response, after_this_request,
                   has_request_context, send_file, send_from_directory)

app = Flask(__name__)

@app.route("/")
def index():
    # url_for генерирует URL
    login_url = url_for("login")
    # Генерирует абсолютный URL (включая доменное имя)
    full_url = url_for("profile", username="example", _external=True)
    return f'<a href="{login_url}">Вход</a>'

@app.route("/redirect-me")
def redirect_me():
    # Перенаправление на главную страницу
    return redirect(url_for("index"))

@app.route("/profile/<username>")
def profile(username):
    return f"Профиль: {username}"

@app.route("/admin")
def admin():
    # Неавторизованный доступ, возвращает 403
    abort(403, description="Доступ запрещён")

@app.route("/download")
def download():
    # Отправить файл (запустить скачивание в браузере)
    return send_from_directory("uploads", "report.pdf",
                               as_attachment=True,
                               download_name="example_report.pdf")

@app.route("/custom-response")
def custom_response():
    # Вручную создать объект ответа
    resp = make_response("<h1>Пользовательский</h1>")
    resp.headers["X-Powered-By"] = "EXAMPLE"

    @after_this_request
    def log_response(response):
        app.logger.info(f"Запрос к {request.path} завершён, статус={response.status_code}")
        return response

    return resp
Другие расширения