Структуры данных
Werkzeug предоставляет некоторые подклассы общих объектов Python, чтобы расширить их дополнительными функциями. Некоторые из них используются для того, чтобы сделать их неизменяемыми, другие используются для изменения некоторых семантик, чтобы лучше работать с HTTP.
Общие цели
Журнал изменений
Изменено в версии 0.6: Теперь классы общего назначения могут быть сериализованы в каждом протоколе pickle, если содержащиеся объекты могут быть сериализованы. Это означает, что 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
MultiDictis a dictionary subclass customized to deal with multiple values for the same key, which is used, for example, 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.Базовое использование:
>>> 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, генерируемое этим классом, также является подклассомBadRequestисключения HTTP и отобразит страницу для400 BAD REQUEST, если оно перехвачено в обработчике исключений HTTP.A
MultiDictcan be constructed from an iterable of(key, value)tuples, a dict, aMultiDictor from Werkzeug 0.2 onwards some keyword parameters.- Параметры
-
mapping – начальное значение для
MultiDict. Это может быть обычный словарь, итерируемый объект кортежей(key, value), илиNone.
-
add(key, value) -
Добавляет новое значение для ключа.
Changelog
New in version 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) -
Извлекает список для ключа из словаря. Если ключ не существует в словаре, возвращается пустой список.
Changelog
Изменено в версии 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 -
Имя файла на стороне клиента.
-
name -
Имя поля формы.
-
headers -
Заголовки multipart как объект
Headers. Обычно он содержит неважную информацию, но в сочетании с пользовательскими запросами multipart сырые заголовки могут быть интересны.Changelog
Новое в версии 0.6.
-
close() -
Закрыть базовый файл, если это возможно.
-
property content_length -
Длина содержимого, отправленная в заголовке. Обычно недоступно
-
property content_type -
Тип содержимого, отправленный в заголовке. Обычно недоступно
-
property mimetype -
Подобно
content_type, но без параметров (например, без кодировки, типа и т. д.) и всегда в нижнем регистре. Например, если тип содержимогоtext/HTML; charset=utf-8, то mimetype будет'text/html'.Changelog
Новое в версии 0.7.
-
property mimetype_params -
Параметры mimetype в виде словаря. Например, если тип содержимого
text/html; charset=utf-8, то параметры будут{'charset': 'utf-8'}.Changelog
Новое в версии 0.7.
-
save(dst, buffer_size=16384) -
Сохранить файл в целевой путь или объект файла. Если целевой объект файла, вы должны закрыть его самостоятельно после вызова. Размер буфера — это количество байтов, хранимых в памяти во время процесса копирования. По умолчанию он равен 16 КБ.
Для безопасного сохранения файла также ознакомьтесь с
secure_filename().- Параметры
-
-
dst — имя файла,
os.PathLikeили открытый объект файла для записи. -
buffer_size — передается как параметр
lengthвshutil.copyfileobj().
-
dst — имя файла,
Changelog
Изменено в версии 1.0: Поддерживает
pathlib.
-
© 2007–2022 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/2.1.x/datastructures/