Сообщить об ошибке.

Класс Config() модуля flask в Python

Объект конфигурации Config модуля flask

Синтаксис:

flask.Config(root_path, defaults=None)

Параметры:

  • root_path - это путь, относительно которого читаются файлы. Когда объект конфигурации создается приложением, то это app.root_path.
  • defaults=None - необязательный словарь ключ-значение, применяемых по умолчанию.

Возвращаемое значение:

Описание:

Объект Config работает точно так же, как словарь dict, но дает возможность заполнять его из файлов или специальных словарей. Есть два общих шаблона для заполнения конфигурации.

Либо можно залить конфиг из конфигурационного Python файла:

app.config.from_pyfile('yourconfig.cfg')

Или, в качестве альтернативы, можно определить параметры конфигурации в модуле, который вызывает app.config.from_object(), или указать путь импорта к модулю, который должен быть загружен. Также можно указать ему использовать тот же модуль и с его помощью указать значения конфигурации непосредственно перед вызовом:

DEBUG = True
SECRET_KEY = 'development key'
app.config.from_object(__name__)

В обоих случаях (загрузка из любого файла Python или загрузка из модулей) в конфигурацию добавляются только ключи записанные в верхнем регистре. Это позволяет использовать строчные значения в файле конфигурации для временных значений, которые не добавляются в конфигурацию, или определять ключи конфигурации в том же файле, который реализует веб-приложение.

Наиболее интересный способ загрузки конфигураций - это использование переменной окружения, указывающей на файл:

app.config.from_envvar('YOURAPPLICATION_SETTINGS')

В этом случае перед запуском приложения необходимо установить эту переменную среды окружения в файл, который нужно использовать. В Linux и OS X используйте оператор export:

export YOURAPPLICATION_SETTINGS='/path/to/config/file'

В Windows используйте оператор set.

Методы объекта Config.


Config.from_envvar(variable_name, silent=False):

Метод Config.from_envvar() загружает конфигурацию из переменной среды, указывающей на файл конфигурации. Это просто ссылка с более приятными сообщениями об ошибках для этой строки кода.

Аргументы:

  • variable_name: имя переменной окружения;
  • silent: если не нужны сообщения об ошибках для отсутствующих файлов, установите значение True.
app.config.from_pyfile(os.environ['YOURAPPLICATION_SETTINGS'])

Возвращает True, если можно загрузить конфигурацию, в противном случае False.

Config.from_file(filename, load, silent=False, text=False):

Новое в версии Flask 2.0.

Метод Config.from_file() обновляет значения в конфигурации из файла, который загружается с помощью параметра load. Загруженные данные передаются методу Config.from_mapping().

Аргументы:

  • filename: путь к файлу с данными. Это может быть абсолютный путь или относительно корневого пути конфигурации.
  • load: вызываемый объект, который принимает дескриптор файла и возвращает словарный объект с загруженными данными из файла.
  • silent=False: если True, то будет игнорировать файл, если он не существует.
  • text=False: указывает, что синтаксический анализатор вместо текста хочет двоичный файл (добавлен в Flask 2.3.0).
import toml
app.config.from_file("config.toml", load=toml.load)

Возвращает True, если можно загрузить конфигурацию, в противном случае False.

  • В версии Flask 2.3.0. добавлен аргумент text=False

Config.from_json(filename, silent=False):

Метод Config.from_json() обновляет значения в конфигурации из файла JSON. Загруженные данные передаются методу Config.from_mapping().

Аргументы:

  • filename: путь к файлу JSON. Это может быть абсолютный путь или относительно корневого пути конфигурации.
  • silent: если True, то будет игнорировать файл, если он не существует.

Не рекомендуется использовать этот метод, начиная с версии 2.0.0, будет удалено в Flask 2.1. Вместо него используйте Config.from_file().

Config.from_mapping(mapping=None, **kwargs):

Метод Config.from_mapping() обновляет конфигурацию из словаря, например update(), игнорируя элементы с именами в нижнем регистре.

Config.from_object(obj):

Метод Config.from_object() обновляет значения конфигурации из данного объекта obj. Объект obj может быть одного из следующих двух типов:

  • строка: в этом случае будет импортирован объект с таким именем.
  • Фактическая ссылка на объект: этот объект используется напрямую

Объекты обычно представляют собой модули или классы. Метод Config.from_object() загружает только атрибуты модуля/класса, имена которых записаны в верхнем регистре. Объект dict не будет работать с этим методом, потому что ключи словаря не являются атрибутами класса dict.

Пример модульной конфигурации:

app.config.from_object('yourapplication.default_config')
from yourapplication import default_config
app.config.from_object(default_config)

Перед загрузкой, с объектом ничего не происходит. Если объект является классом и имеет атрибуты @property, то его необходимо создать перед передачей в этот метод.

Эту функцию следует использовать не для загрузки фактической конфигурации, а для загрузки значений конфигурации по умолчанию. Фактическая конфигурация должна быть загружена с помощью Config.from_pyfile() и в идеале из места, не входящего в пакет, поскольку пакет может быть установлен в масштабе всей системы.

Пример конфигурации на основе классов с использованием Config.from_object() смотрите в разделе "Хранение и загрузка конфигураций Flask".

Config.from_pyfile(filename, silent=False):

Метод Config.from_pyfile() обновляет значения в конфигурации из файла Python. Эта функция ведет себя так, как если бы файл был импортирован как модуль с помощью функции Config.from_object().

Аргументы:

  • filename: имя файла конфигурации. Это может быть либо абсолютное имя файла, либо имя файла относительно корневого пути.
  • silent: если True, то будет игнорировать файл, если он не существует.

Возвращает True, если можно загрузить конфигурацию, в противном случае False.

Config.get_namespace(namespace, lowercase=True, trim_namespace=True):

Метод Config.get_namespace() возвращает словарь, содержащий подмножество параметров конфигурации, соответствующих указанному пространству имен/префиксу. Пример использования:

Parameters- namespace: пространство имен конфигурации.- lowercase: флаг (bool), указывающий, должны ли ключи результирующего словаря быть строчными.- trim_namespace: флаг (bool), указывающий, не должны ли ключи результирующего словаря включать пространство имен.

app.config['IMAGE_STORE_TYPE'] = 'fs'
app.config['IMAGE_STORE_PATH'] = '/var/app/images'
app.config['IMAGE_STORE_BASE_URL'] = 'http://img.website.com'
image_store_config = app.config.get_namespace('IMAGE_STORE_')\

print(image_store_config)
# {
#     'type': 'fs',
#     'path': '/var/app/images',
#     'base_url': 'http://img.website.com'
# }

Метод полезен, когда параметры конфигурации отображаются непосредственно на ключевые аргументы в функциях или конструкторах классов.