Структуры данных
Werkzeug предоставляет некоторые подклассы общих объектов Python, чтобы расширить их дополнительными функциями. Некоторые из них используются для придания им неизменяемости, другие используются для изменения семантики, чтобы лучше работать с HTTP.
Общие цели
Журнал изменений
Изменено в версии 0.6: Классы общего назначения теперь сериализуемы в каждом протоколе, если содержащиеся объекты сериализуемы. Это означает, что FileMultiDict не будет сериализуем, как только он будет содержать файл.
-
class werkzeug.datastructures.TypeConversionDict -
Работает как обычный словарь, но метод
get()может выполнять преобразования типов.MultiDictиCombinedMultiDictявляются подклассами этого класса и обеспечивают ту же функцию.Журнал изменений
Добавлена в версии 0.5.
-
get(key, default=None, type=None) -
Возвращает значение по умолчанию, если запрашиваемые данные не существуют. Если
typeзадан и является вызываемым объектом, он должен преобразовать значение, вернуть его или вызватьValueError, если это невозможно. В этом случае функция вернёт значение по умолчанию, как если бы значение не было найдено:>>> d = TypeConversionDict(foo='42', bar='blub') >>> d.get('foo', type=int) 42 >>> d.get('bar', -1, type=int) -1- Параметры:
-
- ключ – Ключ для поиска.
-
значение_по_умолчанию – Значение по умолчанию, которое будет возвращено, если ключ не найден. Если не указано иначе, возвращается
None. -
тип – Вызываемый объект, используемый для преобразования значения в
MultiDict. Если вызываемый объект вызываетValueError, возвращается значение по умолчанию.
-
-
class werkzeug.datastructures.ImmutableTypeConversionDict -
Работает как
TypeConversionDict, но не поддерживает модификации.Журнал изменений
Добавлена в версии 0.5.
-
class werkzeug.datastructures.MultiDict(mapping=None) -
A
MultiDict— это подкласс словаря, предназначенный для обработки нескольких значений для одного и того же ключа, что используется, например, функциями разбора в обёртках. Это необходимо, так как некоторые HTML-элементы формы передают несколько значений для одного и того же ключа.MultiDictреализует все стандартные методы словаря. Внутренне, все значения для ключа сохраняются в списке, но стандартные методы доступа к словарю возвращают только первое значение для ключа. Если вам нужно получить доступ к другим значениям, необходимо использовать методыlist, как описано ниже.Базовое использование:
>>> d = MultiDict([('a', 'b'), ('a', 'c')]) >>> d MultiDict([('a', 'b'), ('a', 'c')]) >>> d['a'] 'b' >>> d.getlist('a') ['b', 'c'] >>> 'a' in d TrueОн ведет себя как обычный словарь, поэтому все функции словаря возвращают только первое значение, когда для одного ключа найдено несколько значений.
Начиная с Werkzeug 0.3, исключение
KeyError, генерируемое этим классом, также является подклассом исключенияBadRequestHTTP и будет отображать страницу для400 BAD REQUESTесли поймано во всём обработчике исключений HTTP.Объект
MultiDictможет быть создан из итерируемого набора(key, value)кортежей, словаря,MultiDictили начиная с Werkzeug 0.2 — с помощью ключевых параметров.- Параметры:
-
mapping — начальное значение для
MultiDict. Может быть обычным словарем, итерируемым набором кортежей(key, value)илиNone.
-
add(key, value) -
Добавляет новое значение для ключа.
Журнал изменений
Введено в версии 0.6.
- Параметры:
-
- key — ключ для значения.
- value — значение для добавления.
-
clear() → None. Remove all items from D.
-
copy() -
Возвращает поверхностную копию этого объекта.
-
deepcopy(memo=None) -
Возвращает глубокую копию этого объекта.
-
fromkeys(value=None, /) -
Создаёт новый словарь с ключами из итерируемого объекта и значениями, установленными в значение.
-
get(key, default=None, type=None) -
Возвращает значение по умолчанию, если запрошенные данные не существуют. Если
typeзадано и является вызываемой функцией, она должна преобразовать значение, вернуть его или поднятьValueError, если это невозможно. В этом случае функция вернёт значение по умолчанию так, как будто значение не было найдено:>>> d = TypeConversionDict(foo='42', bar='blub') >>> d.get('foo', type=int) 42 >>> d.get('bar', -1, type=int) -1- Параметры:
-
- key — ключ для поиска.
-
default — значение по умолчанию, которое будет возвращено, если ключ не найден. Если не указано, возвращается
None. -
type — вызываемая функция, используемая для приведения значения в
MultiDict. Если эта вызываемая функция подниметValueError, возвращается значение по умолчанию.
-
getlist(key, type=None) -
Возвращает список элементов для заданного ключа. Если этого ключа нет в
MultiDict, возвращается пустой список. Так же как иget,getlistпринимает параметрtype. Все элементы будут преобразованы с помощью заданной вызываемой функции.- Параметры:
-
- key — ключ для поиска.
-
type — вызываемая функция, используемая для приведения значения в
MultiDict. Если эта функция подниметValueError, значение будет удалено из списка.
- Возвращает:
-
a
listсо всеми значениями для ключа.
-
items(multi=False) -
Возвращает итератор пар
(key, value).- Параметры:
-
multi — Если установлено в
True, возвращаемый итератор будет содержать пару для каждого значения каждого ключа. В противном случае он будет содержать только пары для первого значения каждого ключа.
-
keys() → a set-like object providing a view on D's keys
-
lists() -
Возвращает итератор пар
(key, values), где values — список всех значений, связанных с ключом.
-
listvalues() -
Возвращает итератор всех значений, связанных с ключом. Слияние
keys()и это то же самое, что вызовlists():>>> d = MultiDict({"foo": [1, 2, 3]}) >>> zip(d.keys(), d.listvalues()) == d.lists() True
-
pop(key, default=no value) -
Извлекает первый элемент из списка в словаре. После этого ключ удаляется из словаря, поэтому дополнительные значения отбрасываются:
>>> d = MultiDict({"foo": [1, 2, 3]}) >>> d.pop("foo") 1 >>> "foo" in d False- Параметры:
-
- key — ключ для извлечения.
- default — если указано, значение, которое нужно вернуть, если ключ не найден в словаре.
-
popitem() -
Извлекает элемент из словаря.
-
popitemlist() -
Извлекает
(key, list)кортеж из словаря.
-
poplist(key) -
Извлекает список для ключа из словаря. Если ключ не найден в словаре, возвращается пустой список.
Журнал изменений
Изменено в версии 0.5: Если ключ больше не существует, возвращается список вместо повышения ошибки.
-
setdefault(key, default=None) -
Возвращает значение для ключа, если оно есть в словаре, иначе возвращает
defaultи устанавливает это значение дляkey.- Параметры:
-
- key — ключ для поиска.
-
default — значение по умолчанию, которое будет возвращено, если ключ не найден в словаре. Если не указано, возвращается
None.
-
setlist(key, new_list) -
Удаляет старые значения для ключа и добавляет новые. Обратите внимание, что список, в который вы передаёте значения, будет скопирован поверхностно перед вставкой в словарь.
>>> d = MultiDict() >>> d.setlist('foo', ['1', '2']) >>> d['foo'] '1' >>> d.getlist('foo') ['1', '2']- Параметры:
-
- key — ключ, для которого устанавливаются значения.
- new_list — итерируемый объект с новыми значениями для ключа. Сначала удаляются старые значения.
-
setlistdefault(key, default_list=None) -
Подобно
setdefaultно устанавливает несколько значений. Возвращаемый список — это не копия, а список, который фактически используется внутри. Это означает, что вы можете поместить новые значения в словарь, добавляя элементы в список:>>> d = MultiDict({"foo": 1}) >>> d.setlistdefault("foo").extend([2, 3]) >>> d.getlist("foo") [1, 2, 3]- Параметры:
-
- key — ключ для поиска.
- default_list — итерируемый объект со значениями по умолчанию. Он либо копируется (если это был список), либо преобразуется в список перед возвратом.
- Возвращает:
-
a
list
-
to_dict(flat=True) -
Возвращает содержимое в виде обычного словаря. Если
flatявляетсяTrue, возвращаемый словарь будет содержать только первый элемент, еслиflatявляетсяFalse, все значения будут возвращены в виде списков.- Параметры:
-
flat – Если установлено в
False, возвращаемый словарь будет содержать списки со всеми значениями. В противном случае он будет содержать только первое значение для каждого ключа. - Возвращает:
-
словарь
dict
-
update(mapping) -
Метод update() расширяет, а не заменяет существующие списки значений:
>>> a = MultiDict({'x': 1}) >>> b = MultiDict({'x': 2, 'y': 3}) >>> a.update(b) >>> a MultiDict([('y', 3), ('x', 1), ('x', 2)])Если список значений для ключа в
other_dictпуст, новые значения не будут добавлены в словарь, и ключ не будет создан:>>> x = {'empty_list': []} >>> y = MultiDict() >>> y.update(x) >>> y MultiDict([])
-
values() -
Возвращает итератор первого значения в списке значений каждого ключа.
-
-
class werkzeug.datastructures.OrderedMultiDict(mapping=None) -
Работает как обычный
MultiDict, но сохраняет порядок полей. Для преобразования упорядоченного многословарного словаря в список можно использовать методitems()и передать емуmulti=True.В целом,
OrderedMultiDictна порядок медленнее, чемMultiDict.Примечание
Из-за ограничения в Python вы не можете преобразовать упорядоченный многословарный словарь в обычный словарь, используя
dict(multidict). Вместо этого необходимо использовать методto_dict(), иначе внутренние объекты ведра будут доступны.
-
class werkzeug.datastructures.ImmutableMultiDict(mapping=None) -
Неизменяемый
MultiDict.Журнал изменений
Добавлен в версии 0.5.
-
class werkzeug.datastructures.ImmutableOrderedMultiDict(mapping=None) -
Неизменяемый
OrderedMultiDict.Журнал изменений
Добавлен в версии 0.6.
-
class werkzeug.datastructures.CombinedMultiDict(dicts=None) -
Только для чтения
MultiDict, которому можно передать несколько экземпляровMultiDictв виде последовательности, и он объединит значения всех обернутых словарей:>>> from werkzeug.datastructures import CombinedMultiDict, MultiDict >>> post = MultiDict([('foo', 'bar')]) >>> get = MultiDict([('blub', 'blah')]) >>> combined = CombinedMultiDict([get, post]) >>> combined['foo'] 'bar' >>> combined['blub'] 'blah'Это работает для всех операций чтения и вызовет
TypeErrorдля методов, которые обычно изменяют данные, что невозможно.Начиная с Werkzeug 0.3, исключение
KeyError, генерируемое этим классом, также является подклассом исключенияBadRequestHTTP и отобразит страницу для400 BAD REQUESTпри перехвате в общем обработчике HTTP-исключений.
-
class werkzeug.datastructures.ImmutableDict -
Неизменяемый
dict.Журнал изменений
Добавлен в версии 0.5.
-
class werkzeug.datastructures.ImmutableList(iterable=(), /) -
Неизменяемый
list.Журнал изменений
Добавлен в версии 0.5.
- Приватный:
-
class werkzeug.datastructures.FileMultiDict(mapping=None) -
Специальный
MultiDictс удобными методами для добавления файлов. Используется дляEnvironBuilderи полезен для юнит-тестирования.Журнал изменений
Добавлен в версии 0.5.
-
add_file(name, file, filename=None, content_type=None) -
Добавляет новый файл в словарь.
fileможет быть именем файла или объектом, подобнымfileили объектомFileStorage.- Параметры:
-
- name – имя поля.
-
file – имя файла или объект, подобный
file - filename – необязательное имя файла
- content_type – необязательный тип содержимого
-
Другие
-
class werkzeug.datastructures.FileStorage(stream=None, filename=None, name=None, content_type=None, content_length=None, headers=None) -
Класс
FileStorage— тонкий оболочкой над входящими файлами. Он используется объектом запроса для представления загруженных файлов. Все атрибуты потока оболочки проксируются хранилищем файлов, поэтому возможно сделатьstorage.read()вместо длинной формыstorage.stream.read().-
stream -
Поток ввода для загруженного файла. Обычно он указывает на открытый временный файл.
-
filename -
Имя файла на стороне клиента. Может быть
str, или экземпляромos.PathLike.
-
name -
Имя поля формы.
-
headers -
Заголовки multipart как объект
Headers. Обычно содержит нерелевантную информацию, но в сочетании с пользовательскими multipart-запросами исходные заголовки могут быть интересны.Изменения
Новая версия с 0.6.
-
close() -
Закрыть базовый файл, если возможно.
-
property content_length -
Длина содержимого, отправленная в заголовке. Обычно недоступна
-
property content_type -
Тип содержимого, отправленный в заголовке. Обычно недоступен
-
property mimetype -
Как
content_type, но без параметров (например, без charset, type и т. д.) и всегда в нижнем регистре. Например, если тип содержимогоtext/HTML; charset=utf-8, mimetype будет'text/html'.Изменения
Новая версия с 0.7.
-
property mimetype_params -
Параметры mimetype как словарь. Например, если тип содержимого
text/html; charset=utf-8, параметры будут{'charset': 'utf-8'}.Изменения
Новая версия с 0.7.
-
save(dst, buffer_size=16384) -
Сохранить файл в целевой путь или объект файла. Если целевой объект — это объект файла, необходимо закрыть его после вызова. Размер буфера — количество байтов, хранящихся в памяти во время процесса копирования. По умолчанию 16 КБ.
Для безопасного сохранения файлов также обратите внимание на
secure_filename().- Параметры:
-
-
dst – имя файла,
os.PathLike, или открытый объект файла для записи. -
buffer_size – Передаётся как параметр
lengthфункцииshutil.copyfileobj().
-
dst – имя файла,
Изменения
Изменено в версии 1.0: Поддерживает
pathlib.
-
© 2007–2022 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/2.3.x/datastructures/