Веб-приложениям Flask нужна какая-то настройка. Существуют различные параметры конфигурации, которые можно изменить в зависимости от режима работы, например, переключение режима отладки debug
, установка секретного ключа и другие подобные вещи, зависящие от среды выполнения.
При разработке, Flask требует, чтобы конфигурация была доступна при запуске веб-приложения. Конфигурацию можно жестко закодировать в коде, что для многих небольших приложений не так уж и плохо, но есть способы лучше.
Независимо от того, каким образом загружается конфигурация, во Flask всегда доступен объект конфигурации, который содержит загруженные значения конфигурации: это атрибут объекта приложения app.config
. Это то место, куда сам Flask помещает определенные значения конфигурации, а также куда расширения могут помещать свои значения конфигурации. Здесь, также, можно хранить какие-то свои значения конфигурации.
Значение экземпляра приложения app.config
является подклассом словаря Python и может быть изменен так же, как любой словарь:
app = Flask(__name__) app.config['TESTING'] = True
Некоторые значения конфигурации также передаются в объект приложения Flask, чтобы их можно было читать и записывать прям оттуда:
app.testing = True
Чтобы обновить сразу несколько ключей/параметров конфигурации, можете использовать метод dict.update()
:
app.config.update( TESTING=True, SECRET_KEY=b'_5#y2L"F4Q8z\n\xec]/' )
Внимание. Переменная среды
FLASK_ENV
и атрибутapp.env
устарели с версии Flask 2.2.0, что устраняет различие между режимами разработки и отладки. Режим отладки следует контролировать напрямую с помощью параметра CLI--debug
илиapp.run(debug=True)
.Например:
$ export FLASK_APP=yourapplication $ flask run --debug
Параметры конфигурации ENV
и DEBUG
являются особыми, т. к. они могут вести себя непоследовательно, если их изменить после того, как приложение применило параметры. Чтобы надежно настроить ENV
и DEBUG
, Flask использует переменные среды.
Среда указывает Flask, его расширениям и другим программам, таким как Sentry, в каком контексте работает Flask. Он управляется переменной среды окружения FLASK_ENV
(устарело с версии Flask 2.2.0) и по умолчанию установлена на 'production'
.
Установка FLASK_ENV='development'
(устарело с версии Flask 2.2.0), автоматически включит режим отладки DEBUG
. Экземпляр приложения Flask - app.run()
по умолчанию будет использовать интерактивный отладчик и перезагрузку кода при его изменении. Чтобы управлять этим отдельно от режима работы, используйте флаг среды окружения FLASK_DEBUG
.
Чтобы переключить Flask в среду разработки и включить режим отладки, установите FLASK_ENV
(устарело с версии Flask 2.2.0):
# устарело с версии Flask 2.2.0 $ export FLASK_ENV=development $ flask run # во Flask 2.2.0 нужно добавить `app.run(debug=True)` $ export FLASK_APP=yourapplication $ flask run # или добавить при запуске параметр CLI `--debug` # оставив в коде `app.run()` $ export FLASK_APP=yourapplication $ flask run --debug
Рекомендуется использовать режим разработки, как описано выше. В конфигурации или коде можно установить ENV
и DEBUG
, но это настоятельно не рекомендуется. Эти параметры, заданные в app.config
не могут быть заранее прочитаны командой $flask run
на стадии запуска приложения, а некоторые расширения могут уже настроиться на основе предыдущего значения.
При использовании режима отладки загрузчик будет срабатывать всякий раз, когда изменяется ваш код Python или импортированные модули. Перезагрузчик может просматривать дополнительные файлы с опцией --extra-files
. Несколько путей разделяются :
или ;
в Windows.
$ flask run --extra-files file1:dirA/file2:dirB/ * Running on http://127.0.0.1:8000/ * Detected change in '/path/to/file1', reloading
Перезагрузчик также может игнорировать файлы, использующие шаблоны как в модуле fnmatch
с параметром --exclude-patterns
. Несколько шаблонов разделяются :
или ;
в Windows.
ENV
,DEBUG
,TESTING
,PROPAGATE_EXCEPTIONS
,PRESERVE_CONTEXT_ON_EXCEPTION
,TRAP_HTTP_EXCEPTIONS
,TRAP_BAD_REQUEST_ERRORS
,SECRET_KEY
,SESSION_COOKIE_NAME
,SESSION_COOKIE_DOMAIN
,SESSION_COOKIE_PATH
,SESSION_COOKIE_HTTPONLY
,SESSION_COOKIE_SECURE
,SESSION_COOKIE_SAMESITE
,PERMANENT_SESSION_LIFETIME
,SESSION_REFRESH_EACH_REQUEST
,USE_X_SENDFILE
,SEND_FILE_MAX_AGE_DEFAULT
,SERVER_NAME
,APPLICATION_ROOT
,PREFERRED_URL_SCHEME
,MAX_CONTENT_LENGTH
,JSON_AS_ASCII
,JSON_SORT_KEYS
,JSONIFY_PRETTYPRINT_REGULAR
,JSONIFY_MIMETYPE
,TEMPLATES_AUTO_RELOAD
,EXPLAIN_TEMPLATE_LOADING
,MAX_COOKIE_SIZE
.ENV
:Параметр ENV
определяет, в каком режиме/среде выполняется приложение. Flask и расширения имеют разное поведение в зависимости от режима работы, например в режиме разработки ('development'
), автоматически включается режим отладки.
Этому ключу конфигурации, соответствует атрибут экземпляра приложения app.env
(устарело с версии Flask 2.2.0). Он устанавливается переменной среды окружения FLASK_ENV
(устарело с версии Flask 2.2.0) и может вести себя не так, как ожидалось, если он установлен в коде.
Внимание! Не включайте режим разработки на боевом сервере.
Внимание. Переменная среды
FLASK_ENV
и атрибутapp.env
устарели с версии Flask 2.2.0, что устраняет различие между режимами разработки и отладки. Режим отладки следует контролировать напрямую с помощью параметра CLI--debug
илиapp.run(debug=True)
.
DEBUG
:Параметр DEBUG
включает режим отладки. При использовании команды $flask run
для запуска сервера разработки, будет отображаться интерактивный отладчик для необработанных исключений, а сервер будет перезагружаться при каждом изменении кода.
Этому ключу конфигурации соответствует атрибут экземпляра приложения app.debug
. Режим отладки включается автоматически, когда ENV='development'
, и переопределяется переменной среды окружения FLASK_DEBUG
. Если параметр задан в коде, то он может вести себя не так, как ожидалось.
Внимание! Не включайте режим разработки на боевом сервере.
По умолчанию: True
, если ENV='development'
, или False
в противном случае.
TESTING
:Параметр TESTING
включает режим тестирования. При включенном ключе TESTING
, исключения перестают обрабатываться обработчиками ошибок веб-приложения и распространяются на код, который их вызывает. Расширения также могут менять свое поведение, для облегчения тестирования.
По умолчанию: False
.
PROPAGATE_EXCEPTIONS
:Если установлен параметр PROPAGATE_EXCEPTIONS
, то исключения возникают повторно, а не обрабатываются обработчиками ошибок веб-приложения. Если НЕ установлен, то включится автоматически, если включены параметры TESTING
или DEBUG
.
По умолчанию: None
PRESERVE_CONTEXT_ON_EXCEPTION
:Если установлен параметр PRESERVE_CONTEXT_ON_EXCEPTION
, то не будет выдаваться контекст запроса при возникновении исключения. Если НЕ установлен, то включится автоматически, при включении параметра DEBUG
. Это позволяет отладчикам анализировать данные запроса на предмет ошибок и, как правило, не требует настройки напрямую.
По умолчанию: None
TRAP_HTTP_EXCEPTIONS
:Если TRAP_HTTP_EXCEPTIONS
установлен в True
и нет обработчика для исключения типа HTTPException
, то вызывает его повторно, чтобы он обрабатывался интерактивным отладчиком, вместо того, чтобы возвращать его как простой ответ об HTTP-ошибке (например 500).
По умолчанию: False
TRAP_BAD_REQUEST_ERRORS
:Если установлен параметр TRAP_BAD_REQUEST_ERRORS
, то при попытках получить из объекта запроса доступ к ключу, которого не существует, таких как request.args
и request.form
, будет вызывать ошибку как необработанное исключение, и не будет возвращать страницу с ошибкой 400 Bad Request
. Это более конкретная версия параметра TRAP_HTTP_EXCEPTIONS
.
Если НЕ установлен, то включается автоматически в режиме отладки.
По умолчанию: None
SECRET_KEY
:Параметр SECRET_KEY
устанавливает секретный ключ, который будет использоваться для безопасной подписи файла cookie
, используемого в сессии/сеансе и может использоваться для любых других потребностей, связанных с безопасностью, расширениями или веб-приложением. Это должен быть длинная случайная байтовая или текстовая строка. Например:
$ python -c 'import os; print(os.urandom(16))' b'_5#y2L"F4Q8z\n\xec]/'
Внимание! Не раскрывайте секретный ключ при публикации кода приложения.
По умолчанию: None
SESSION_COOKIE_NAME
:Параметр SESSION_COOKIE_NAME
отвечает за имя файла cookie
сессии/сеанса. Его можно изменить, если уже есть файл cookie
с таким именем.
По умолчанию: 'session'
SESSION_COOKIE_DOMAIN
:Параметр SESSION_COOKIE_DOMAIN
- это правило сопоставления домена, для которого будет действителен cookie
сессии/сеанса. Если не установлен, то cookie
будет действителен для всех субдоменов, основного домена SERVER_NAME
. Если False
, то домен cookie
не будет установлен.
По умолчанию: None
.
SESSION_COOKIE_PATH
:Параметр SESSION_COOKIE_PATH
- это путь, для которого будет действителен cookie
сессии/сеанса. Если не установлен, то cookie
будет действителен под APPLICATION_ROOT
или '/'
.
По умолчанию: None
.
SESSION_COOKIE_HTTPONLY
:Если параметр SESSION_COOKIE_HTTPONLY
установлен в True
, то браузеры не разрешают JavaScript доступ к файлам cookie
, помеченным как "HTTP only" в целях безопасности.
По умолчанию: True
.
SESSION_COOKIE_SECURE
:Если параметр SESSION_COOKIE_SECURE
установлен в True
, то браузеры будут отправлять файлы cookie
с запросами через HTTPS, только если файл cookie
помечен как "secure". Этот параметр имеет смысл, только если приложение работает по протоколу HTTPS.
По умолчанию: False
SESSION_COOKIE_SAMESITE
:Параметр SESSION_COOKIE_SAMESITE
ограничивает способ отправки файлов cookie
с запросами с внешних сайтов. Может быть установлен на Lax
(рекомендуется) или Strict
. Дополнительно смотрите материал "Проблемы безопасности приложений на Flask. -> Заголовки безопасности".
По умолчанию: None
.
PERMANENT_SESSION_LIFETIME
:Параметр PERMANENT_SESSION_LIFETIME
определяет срок действия cookie
. Если для session.permanent
задано значение True
, то в будущем, срок действия cookie
будет установлен на это количество секунд. Может быть объектом datetime.timedelta
или int
.
По умолчанию, Flask проверяет, что криптографическая подпись cookie
не старше этого значения.
Значение по умолчанию: datetime.timedelta(days=31)
- 2678400 секунд.
SESSION_REFRESH_EACH_REQUEST
:Параметр SESSION_REFRESH_EACH_REQUEST
контролирует, будет ли cookie
отправляться с каждым ответом, если session.permanent
имеет значение True
. Отправка файла cookie
каждый раз (по умолчанию) может более надежно предотвратить истечение срока сессии/сеанса, но требует большей пропускной способности. Непостоянные сеансы не затрагиваются.
По умолчанию: True
USE_X_SENDFILE
:Параметр USE_X_SENDFILE
устанавливает заголовок X-Sendfile
, при обслуживании файлов сторонним сервером.
Некоторые веб-серверы, такие как Apache, распознают это и обрабатывают файлы более эффективно своими механизмами, освобождая от этого Flask. В противном случае файлы, будут обслуживаются средствами Flask.
Параметр USE_X_SENDFILE
имеет смысл только при настройке такого сервера.
По умолчанию: False
.
SEND_FILE_MAX_AGE_DEFAULT
:Параметр SEND_FILE_MAX_AGE_DEFAULT
, при обслуживании файлов, устанавливает максимальный возраст кеша на это количество секунд. Может быть объектом datetime.timedelta
или int
. Можно переопределять это значение для каждого файла, используя метод объекта приложения app.get_send_file_max_age()
или объекта схемы blueprint
.
Если None
, то функция flask.send_file()
сообщает браузеру, что вместо временного кеша будут использоваться условные запросы, что обычно предпочтительнее.
По умолчанию: None
.
SERVER_NAME
:Параметр SERVER_NAME
сообщает, к какому хосту и порту привязано веб-приложению. Требуется для поддержки сопоставления маршрута поддомена.
Если SESSION_COOKIE_DOMAIN
не установлен, то cookie
сессии/сеанса будет использоваться SERVER_NAME
. Современные веб-браузеры не позволяют устанавливать cookie
для доменов без точки. Чтобы использовать домен локально, необходимо добавить имена хостов, которые должны маршрутизировать приложение, в файл hosts
компьютера.
Например:
127.0.0.1 localhost.dev
Если SERVER_NAME
установлен, то функция flask.url_for
может генерировать внешние URL-адреса только с контекстом приложения, а не с контекстом запроса.
По умолчанию: None
.
APPLICATION_ROOT
:Параметр APPLICATION_ROOT
сообщает Flask, по какому пути монтируется приложение веб-сервером. Это используется для генерации URL-адресов вне контекста запроса. Внутри запроса, диспетчер отвечает за установку SCRIPT_NAME
. Примеры конфигурации диспетчеризации смотрите в разделе "Диспетчеризация веб-приложений на Flask".
Если не установлен SESSION_COOKIE_PATH
, то APPLICATION_ROOT
будет использоваться для пути cookie
сессии/сеанса.
По умолчанию: '/'
.
PREFERRED_URL_SCHEME
:Параметр PREFERRED_URL_SCHEME
отвечает за схему для создания внешних URL-адресов, когда они не находятся в контексте запроса.
По умолчанию: 'http'
.
MAX_CONTENT_LENGTH
:Параметр MAX_CONTENT_LENGTH
не позволяет читать входящий запрос, размер которого, больше этого количества байтов. Если не задан и в запросе не указан CONTENT_LENGTH
, то данные не будут прочитаны в целях безопасности.
По умолчанию: None
.
JSON_AS_ASCII
:Параметр JSON_AS_ASCII
отвечает за сериализацию объектов в JSON с кодировкой ASCII. Если JSON_AS_ASCII
отключен (False
), то JSON, возвращаемый из jsonify
, будет содержать символы Unicode. Это влияет на безопасность при рендеринге JSON в JavaScript в шаблонах и обычно должно оставаться включенным.
По умолчанию: True
.
JSON_SORT_KEYS
:Параметр JSON_SORT_KEYS
сортирует ключи объектов JSON по алфавиту. Это полезно для кеширования, так как обеспечивает одинаковую сериализацию данных, независимо от того, какой хэш-код используется Python. Хотя это не рекомендуется, но можно отключить этот параметр для возможного повышения производительности за счет кеширования.
По умолчанию: True
JSONIFY_PRETTYPRINT_REGULAR
:Если параметр JSONIFY_PRETTYPRINT_REGULAR
имеет значение True
, то ответы jsonify
будут выводиться с символами новой строки \n
, пробелами и отступами для облегчения чтения людьми. Всегда включен в режиме отладки.
По умолчанию: False
JSONIFY_MIMETYPE
:Параметр JSONIFY_MIMETYPE
указывает тип mimetype
ответов jsonify
.
По умолчанию: 'application/json'
.
TEMPLATES_AUTO_RELOAD
:Параметр TEMPLATES_AUTO_RELOAD
отвечает за обновление шаблонов, когда они редактируются. Если этот ключ не установлен, то будет включен автоматически в режиме отладки.
По умолчанию: None
.
EXPLAIN_TEMPLATE_LOADING
:Параметр EXPLAIN_TEMPLATE_LOADING
записывает отладочную информацию, отслеживая, как был загружен файл шаблона. Это может быть полезно, при выяснении, почему шаблон не был загружен или загружен не тот файл шаблона.
По умолчанию: False
MAX_COOKIE_SIZE
:Параметр MAX_COOKIE_SIZE
предупреждает, если заголовки файлов cookie
превышают это количество байтов. По умолчанию - 4093. Большие файлы cookie
могут игнорироваться браузерами. Установите 0, чтобы отключить предупреждение.