Структуры данных
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
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, генерируемое этим классом, также является подклассом исключения HTTPBadRequestи отобразит страницу для400 BAD REQUESTв случае перехвата в общем обработчике исключений HTTP.Объект
MultiDictможно создать из итерируемого объекта кортежей(key, value), словаря,MultiDictили, начиная с Werkzeug 0.2, из некоторых параметров ключевых слов.- Параметры
-
mapping – начальное значение для
MultiDict. Может быть обычным словарем, итерируемым объектом кортежей(key, value)илиNone.
-
add(key, value) -
Добавляет новое значение для ключа.
Changelog
Добавлена в версии 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, значение будет удалено из списка.
- Возвращает
-
список
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 – итерируемый объект значений по умолчанию. Он либо копируется (если это был список), либо преобразуется в список перед возвратом.
- Возвращает
-
список
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, генерируемое этим классом, также является подклассом исключения HTTPBadRequestи отобразит страницу для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-запросами исходные заголовки могут быть интересны.Изменения
Добавлено в версии 0.6.
-
close() -
Закрыть базовый файл, если это возможно.
-
property content_length -
Длина содержимого, переданная в заголовке. Обычно недоступна.
-
property content_type -
Тип содержимого, переданный в заголовке. Обычно недоступен.
-
property mimetype -
Подобно
content_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–2021 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/2.0.x/datastructures/