Структуры данных
Werkzeug предоставляет некоторые подклассы общих объектов Python, чтобы расширить их дополнительными функциями. Некоторые из них используются для их неизменяемости, другие используются для изменения некоторых семантик для лучшей работы с HTTP.
Общие цели
Журнал изменений
Изменено в версии 0.6: Теперь классы общего назначения могут быть сериализованы в каждом протоколе, если только содержащиеся объекты могут быть сериализованы. Это означает, что FileMultiDict не будет сериализована, как только она будет содержать файл.
-
class werkzeug.datastructures.TypeConversionDict -
Работает как обычный словарь, но метод
get()может выполнять преобразования типов.MultiDictиCombinedMultiDictявляются подклассами этого класса и предоставляют ту же функцию.Журнал изменений
Добавлен в версии 0.5.
-
get(key: K) → V | None - get(key:K, default:V) V
- get(key:K, default:T) V|T
- get(key:str, type:Callable[[V],T]) T|None
- get(key:str, default:T, type:Callable[[V],T]) T
-
Возвращает значение по умолчанию, если запрашиваемые данные не существуют. Если
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илиTypeErrorвызывается этим вызываемым объектом, возвращается значение по умолчанию.
Журнал изменений
Изменено в версии 3.0.2: Возвращает значение по умолчанию при
TypeErrorтакже.
-
-
class werkzeug.datastructures.ImmutableTypeConversionDict -
Работает как
TypeConversionDict, но не поддерживает изменения.Журнал изменений
Добавлен в версии 0.5.
-
copy() -
Возвращает поверхностную изменяемую копию этого объекта. Имейте в виду, что стандартная функция библиотеки
copy()является пустой операцией для этого класса, как и для любого другого неизменяемого типа Python (например:tuple).- Возвращаемый тип:
-
TypeConversionDict[K, V]
-
-
class werkzeug.datastructures.MultiDict(mapping=None) -
A
MultiDictis a dictionary subclass customized to deal with multiple values for the same key which is for example used by the parsing functions in the wrappers. This is necessary because some HTML form elements pass multiple values for the same key.MultiDictimplements all standard dictionary methods. Internally, it saves all values for a key as a list, but the standard dict access methods will only return the first value for a key. If you want to gain access to the other values, too, you have to use thelistmethods as explained below.Basic Usage:
>>> d = MultiDict([('a', 'b'), ('a', 'c')]) >>> d MultiDict([('a', 'b'), ('a', 'c')]) >>> d['a'] 'b' >>> d.getlist('a') ['b', 'c'] >>> 'a' in d TrueIt behaves like a normal dict thus all dict functions will only return the first value when multiple values for one key are found.
From Werkzeug 0.3 onwards, the
KeyErrorraised by this class is also a subclass of theBadRequestHTTP exception and will render a page for a400 BAD REQUESTif caught in a catch-all for HTTP exceptions.A
MultiDictcan be constructed from an iterable of(key, value)tuples, a dict, aMultiDictor from Werkzeug 0.2 onwards some keyword parameters.- Parameters:
-
mapping (MultiDict[K, V] | cabc.Mapping[K, V | list[V] | tuple[V, ...] | set[V]] | cabc.Iterable[tuple[K, V]] | None) – the initial value for the
MultiDict. Either a regular dict, an iterable of(key, value)tuples orNone.
Changelog
Changed in version 3.1: Implement
|and|=operators.-
add(key, value) -
Adds a new value for the key.
Changelog
Added in version 0.6.
- Parameters:
-
- key (K) – the key for the value.
- value (V) – the value to add.
- Return type:
-
None
-
getlist(key: K) → list[V] - getlist(key:K, type:Callable[[V],T]) list[T]
-
Return the list of items for a given key. If that key is not in the
MultiDict, the return value will be an empty list. Just likeget,getlistaccepts atypeparameter. All items will be converted with the callable defined there.- Parameters:
-
- key – The key to be looked up.
-
type – Callable to convert each value. If a
ValueErrororTypeErroris raised, the value is omitted.
- Returns:
-
a
listof all the values for the key.
Changelog
Changed in version 3.1: Catches
TypeErrorin addition toValueError.
-
setlist(key, new_list) -
Remove the old values for a key and add new ones. Note that the list you pass the values in will be shallow-copied before it is inserted in the dictionary.
>>> d = MultiDict() >>> d.setlist('foo', ['1', '2']) >>> d['foo'] '1' >>> d.getlist('foo') ['1', '2']- Parameters:
-
- key (K) – The key for which the values are set.
- new_list (Iterable[V]) – An iterable with the new values for the key. Old values are removed first.
- Return type:
-
None
-
setdefault(key: K) → None - setdefault(key:K, default:V) V
-
Returns the value for the key if it is in the dict, otherwise it returns
defaultand sets that value forkey.- Parameters:
-
- key – The key to be looked up.
-
default – The default value to be returned if the key is not in the dict. If not further specified it’s
None.
-
setlistdefault(key, default_list=None) -
Like
setdefaultbut sets multiple values. The list returned is not a copy, but the list that is actually used internally. This means that you can put new values into the dict by appending items to the list:>>> d = MultiDict({"foo": 1}) >>> d.setlistdefault("foo").extend([2, 3]) >>> d.getlist("foo") [1, 2, 3]
-
lists() -
Возвращает итератор пар
(key, values), где значения — список всех значений, связанных с ключом.
-
values() -
Возвращает итератор первого значения в списке значений для каждого ключа.
- Тип возвращаемого значения:
-
Iterable[V]
-
listvalues() -
Возвращает итератор всех значений, связанных с ключом. Сопоставление с
keys()эквивалентно вызовуlists():>>> d = MultiDict({"foo": [1, 2, 3]}) >>> zip(d.keys(), d.listvalues()) == d.lists() True
-
copy() -
Возвращает поверхностную копию этого объекта.
- Тип возвращаемого значения:
-
te.Self
-
deepcopy(memo=None) -
Возвращает глубокую копию этого объекта.
- Параметры:
-
memo (t.Any)
- Тип возвращаемого значения:
-
te.Self
-
to_dict() → dict[K, V] - to_dict(flat:Literal[False]) словарь[K,список[V]]
-
Возвращает содержимое в виде обычного словаря. Если
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([])
-
pop(key: K) → V - pop(key:K, default:V) V
- pop(key:K, default:T) V|T
-
Извлекает первое значение из списка значений в словаре. После чего ключ удаляется из словаря, и дополнительные значения игнорируются:
>>> d = MultiDict({"foo": [1, 2, 3]}) >>> d.pop("foo") 1 >>> "foo" in d False- Параметры:
-
- key – ключ для извлечения.
- default – если указано, значение, которое будет возвращено, если ключ не найден в словаре.
-
popitem() -
Извлекает пару ключ-значение из словаря.
- Тип возвращаемого значения:
-
кортеж[K, V]
-
poplist(key) -
Извлекает список значений для ключа из словаря. Если ключ не найден в словаре, возвращается пустой список.
Журнал изменений
Изменено в версии 0.5: Если ключ больше не существует, возвращается список, а не возникает ошибка.
- Параметры:
-
key (K)
- Тип возвращаемого значения:
-
список[V]
-
popitemlist() -
Извлекает
(key, list)кортеж из словаря.
-
clear() → None. Remove all items from D.
-
fromkeys(value=None, /) -
Создаёт новый словарь с ключами из итерируемого объекта и значениями, установленным в value.
-
-
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- Параметры:
-
- ключ (K) – Ключ для поиска.
-
значение_по_умолчанию (V | T | None) – Значение по умолчанию, которое будет возвращено, если ключ не найден. Если не указано иначе, возвращается
None. -
тип (Callable[[V], T] | None) – Вызываемый объект, используемый для преобразования значения в
MultiDict. Если этот вызываемый объект вызываетValueErrorилиTypeError, возвращается значение по умолчанию.
- Тип возвращаемого значения:
-
V | T | None
Журнал изменений
Изменено в версии 3.0.2: Возвращает значение по умолчанию при возникновении
TypeErrorтакже.
-
keys() → a set-like object providing a view on D's keys
-
-
class werkzeug.datastructures.OrderedMultiDict -
Работает как обычный
MultiDict, но сохраняет порядок полей. Чтобы преобразовать упорядоченный многослойный словарь в список, можно использовать методitems()и передать емуmulti=True.В целом,
OrderedMultiDictна порядок медленнее, чемMultiDict.примечание
Из-за ограничения в Python невозможно преобразовать упорядоченный многослойный словарь в обычный словарь, используя
dict(multidict). Вместо этого необходимо использовать методto_dict(), иначе внутренние объекты буфера будут доступны.Устарело начиная с версии 3.1: Будет удалено в Werkzeug 3.2. Используйте
MultiDictвместо этого.
-
class werkzeug.datastructures.ImmutableMultiDict -
Неизменяемый
OrderedMultiDict.Устарело начиная с версии 3.1: Будет удалено в Werkzeug 3.2. Используйте
ImmutableMultiDictвместо этого.Журнал изменений
Добавлен в версии 0.6.
-
werkzeug.datastructures.ImmutableOrderedMultiDict -
псевдоним
_ImmutableOrderedMultiDict
-
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.- Параметры:
-
словари (cabc.Iterable[MultiDict[K, V]] | None)
-
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.
- Параметры:
-
mapping (MultiDict[K, V] | cabc.Mapping[K, V | список[V] | кортеж[V, ...] | множество[V]] | cabc.Iterable[кортеж[K, V]] | None)
-
add_file(name, file, filename=None, content_type=None) -
Добавляет новый файл в словарь.
fileможет быть именем файла или объектом типаfileилиFileStorage.
Другие
-
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 запросами, исходные заголовки могут быть интересными.Changelog
Добавлен в версии 0.6.
-
property content_type: str | None -
Тип содержимого, отправленный в заголовке. Обычно недоступен.
-
property content_length: int -
Длина содержимого, отправленная в заголовке. Обычно недоступна.
-
property mimetype: str -
Аналогично
content_type, но без параметров (например, без charset, type и т. д.) и всегда в нижнем регистре. Например, если тип содержимогоtext/HTML; charset=utf-8, то mimetype будет'text/html'.Changelog
Добавлен в версии 0.7.
-
property mimetype_params: dict[str, str] -
Параметры mimetype в виде словаря. Например, если тип содержимого
text/html; charset=utf-8, то параметры будут{'charset': 'utf-8'}.Changelog
Добавлен в версии 0.7.
-
save(dst, buffer_size=16384) -
Сохранить файл в целевой путь или объект файла. Если целевой объект является объектом файла, вы должны закрыть его самостоятельно после вызова. Размер буфера — это количество байтов, хранящихся в памяти во время процесса копирования. По умолчанию он равен 16 КБ.
Для безопасного сохранения файла см. также
secure_filename().- Параметры:
-
-
dst (строка | PathLike[строка] | IO[байты]) – имя файла,
os.PathLikeили открытый объект файла для записи. -
buffer_size (целое число) – Передается как параметр
lengthфункцииshutil.copyfileobj().
-
dst (строка | PathLike[строка] | IO[байты]) – имя файла,
- Тип возвращаемого значения:
-
None
Changelog
Изменено в версии 1.0: Поддерживает
pathlib.
-
close() -
Закрыть базовый файл, если это возможно.
- Тип возвращаемого значения:
-
None
© 2007 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/latest/datastructures/