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()
загружает конфигурацию из переменной среды,Config.from_file()
обновляет конфигурацию из файла,Config.from_json()
обновляет конфигурацию из файла JSON,Config.from_mapping()
обновляет конфигурацию из словаря,Config.from_object()
обновляет конфигурацию из объекта,Config.from_pyfile()
обновляет конфигурацию из файла Python,Config.get_namespace()
обновляет конфигурацию из окружения.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' # }
Метод полезен, когда параметры конфигурации отображаются непосредственно на ключевые аргументы в функциях или конструкторах классов.