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