Django Utils ¶
Этот документ охватывает все стабильные модули в django.utils
. Большинство модулей django.utils
предназначены для внутреннего использования, и только следующие части могут считаться стабильными и, следовательно, обратно совместимыми в соответствии с политикой устаревания внутренней версии .
django.utils.cache
¶
Этот модуль содержит вспомогательные функции для управления кешированием HTTP. Это делается путем управления Vary
заголовком ответов. Он включает в себя функции для непосредственного исправления заголовка объектов ответа и декораторы, которые изменяют функции для исправления этого заголовка самостоятельно.
Для получения информации о Vary
заголовке см.RFC 7231 # section-7.1.4 .
По сути, Vary
заголовок HTTP определяет, какие заголовки должен учитывать кеш при построении ключа кеша. Запросы с одним и тем же путем, но разным содержимым заголовков для названных заголовков Vary
должны получить разные ключи кеша, чтобы предотвратить доставку неправильного содержимого.
Например, промежуточное ПО для интернационализации должно различать кеши по Accept-language
заголовку.
-
patch_cache_control
( ответ , ** kwargs ) ¶ Эта функция исправляет
Cache-Control
заголовок, добавляя к нему все аргументы ключевого слова. Преобразование выглядит следующим образом:- Все имена параметров ключевого слова переводятся в нижний регистр, а символы подчеркивания преобразуются в дефисы.
- Если значение параметра равно
True
(точноTrue
, а не только истинное значение), в заголовок добавляется только имя параметра. - Все остальные параметры добавляются с их значением после применения
str()
к нему.
Изменено в Django 3.1:no-cache
Добавлена поддержка нескольких имен полей в директиве.
-
get_max_age
( ответ ) ¶ Возвращает максимальный возраст из заголовка ответа Cache-Control в виде целого числа (или,
None
если он не был найден или не был целым числом).
-
patch_response_headers
( ответ , cache_timeout = None ) ¶ Добавляет несколько полезных заголовков к данному
HttpResponse
объекту:Expires
Cache-Control
Каждый заголовок добавляется только в том случае, если он еще не установлен.
cache_timeout
в секундах. ЭтаCACHE_MIDDLEWARE_SECONDS
настройка используется по умолчанию.
-
add_never_cache_headers
( ответ ) ¶ Добавляет заголовок к ответу, чтобы указать, что страницу никогда не следует кэшировать.
Cache-Control: max-age=0, no-cache, no-store, must-revalidate, private
-
patch_vary_headers
( ответ , новые заголовки ) ¶ Добавляет (или обновляет)
Vary
заголовок в данномHttpResponse
объекте.newheaders
это список имен заголовков, которые должны быть вVary
. Если заголовки содержат звездочку, тоVary
заголовок будет состоять из одной звездочки'*'
, согласноRFC 7231 # section-7.1.4 . В противном случае существующие заголовкиVary
не удаляются.
-
get_cache_key
( запрос , key_prefix = None , method = 'GET' , cache = None ) ¶ Возвращает ключ кеша на основе пути запроса. Его можно использовать на этапе запроса, поскольку он извлекает список заголовков для учета из реестра глобального пути и использует их для создания ключа кеша для проверки.
Если список заголовков не сохранен, страницу необходимо перестроить, поэтому функция вернется
None
.
-
learn_cache_key
( запрос , ответ , cache_timeout = None , key_prefix = None , cache = None ) ¶ Узнает, какие заголовки следует учитывать для некоторого пути запроса от объекта ответа. Он сохраняет эти заголовки в глобальном реестре путей, чтобы при последующем доступе к этому пути было известно, какие заголовки следует учитывать, без создания самого объекта ответа. Заголовки указаны в
Vary
заголовке ответа, но мы хотим предотвратить генерацию ответа.Список заголовков, используемых для генерации ключей кеша, хранится в том же кэше, что и сами страницы. Если кеш устаревает некоторые данные из кеша, это означает, что мы должны создать ответ один раз, чтобы получить заголовок Vary и, следовательно, список заголовков, которые будут использоваться для ключа кеша.
django.utils.dateparse
¶
Функции, определенные в этом модуле, имеют следующие общие свойства:
- Они принимают строки в форматах даты и времени ISO 8601 (или некоторых близких альтернативах) и возвращают объекты из соответствующих классов в
datetime
модуле Python . - Они повышаются,
ValueError
если их ввод хорошо отформатирован, но не является допустимой датой или временем. - Они возвращаются,
None
если он вообще не отформатирован. - Они принимают на входе разрешение до пикосекунды, но усекают его до микросекунд, поскольку это поддерживает Python.
-
parse_date
( значение ) ¶ Разбирает строку и возвращает
datetime.date
.
-
parse_time
( значение ) ¶ Разбирает строку и возвращает
datetime.time
.Смещения UTC не поддерживаются; если
value
описывает один, результат будетNone
.Изменено в Django 3.1:Добавлена поддержка разделителей запятой для миллисекунд.
-
parse_datetime
( значение ) ¶ Разбирает строку и возвращает
datetime.datetime
.Поддерживаются смещения UTC; если
value
описывает один,tzinfo
атрибут результата являетсяdatetime.timezone
экземпляром.Изменено в Django 3.1:Добавлена поддержка разделителей запятой для миллисекунд.
-
parse_duration
( значение ) ¶ Разбирает строку и возвращает
datetime.timedelta
.Ожидает данные в формате , или как определено ISO 8601 (например, что эквивалентно ) или в формате дневного интервала PostgreSQL (например ).
"DD HH:MM:SS.uuuuuu"
"DD HH:MM:SS,uuuuuu"
P4DT1H15M20S
4 1:15:20
3 days 04:05:06
Изменено в Django 3.1:Добавлена поддержка разделителей запятой для десятичных дробей в формате ISO 8601 и для этого формата .
"DD HH:MM:SS,uuuuuu"
django.utils.decorators
¶
-
method_decorator
( декоратор , name = '' ) [источник] ¶ Преобразует декоратор функции в декоратор метода. Его можно использовать для украшения методов или классов; в последнем случае
name
это имя метода, который нужно декорировать, и является обязательным.decorator
также может быть списком или кортежем функций. Они обертываются в обратном порядке, так что порядок вызова соответствует порядку, в котором функции появляются в списке / кортеже.См. Пример использования декорирования представлений на основе классов .
-
decorator_from_middleware
( middleware_class ) [источник] ¶ Учитывая класс промежуточного программного обеспечения, возвращает декоратор представления. Это позволяет использовать функции промежуточного программного обеспечения для каждого представления. Промежуточное ПО создается без каких-либо переданных параметров.
Она предполагает промежуточное программное обеспечение, который совместим со старым стилем Django 1.9 и более ранние версии (имеющие такие методы , как
process_request()
,process_exception()
, иprocess_response()
).
-
decorator_from_middleware_with_args
( middleware_class ) [источник] ¶ Подобно
decorator_from_middleware
, но возвращает функцию, которая принимает аргументы, передаваемые в middleware_class. Например,cache_page()
декоратор создаетсяCacheMiddleware
так:cache_page = decorator_from_middleware_with_args(CacheMiddleware) @cache_page(3600) def my_view(request): pass
-
sync_only_middleware
( промежуточное ПО ) [источник] ¶ - Новое в Django 3.1.
Помечает промежуточное ПО как только синхронное . (Значение по умолчанию в Django, но это позволяет вам рассчитывать на будущее, если значение по умолчанию когда-либо изменится в будущем выпуске.)
-
async_only_middleware
( промежуточное ПО ) [источник] ¶ - Новое в Django 3.1.
Помечает промежуточное ПО как только асинхронное . Django заключит его в асинхронный цикл обработки событий, когда он будет вызван из пути запроса WSGI.
-
sync_and_async_middleware
( промежуточное ПО ) [источник] ¶ - Новое в Django 3.1.
Помечает промежуточное ПО как совместимое с синхронизацией и асинхронностью , что позволяет избежать преобразования запросов. Чтобы использовать этот декоратор, необходимо реализовать определение текущего типа запроса. Подробнее см. Документацию по асинхронному промежуточному программному обеспечению .
django.utils.encoding
¶
-
smart_str
( s , encoding = 'utf-8' , strings_only = False , errors = 'strict' ) ¶ Возвращает
str
объект, представляющий произвольный объектs
. Обрабатывает байтовые строки с помощьюencoding
кодека.Если
strings_only
естьTrue
, не конвертируйте (некоторые) объекты, не похожие на строки.
-
is_protected_type
( объект ) ¶ Определите, относится ли экземпляр объекта к защищенному типу.
Объекты защищенных типов сохраняются как есть при передаче в
force_str(strings_only=True)
.
-
force_str
( s , encoding = 'utf-8' , strings_only = False , errors = 'strict' ) ¶ Аналогично
smart_str()
, за исключением того, что ленивые экземпляры преобразуются в строки, а не хранятся как ленивые объекты.Если
strings_only
естьTrue
, не конвертируйте (некоторые) объекты, не похожие на строки.
-
smart_bytes
( s , encoding = 'utf-8' , strings_only = False , errors = 'strict' ) ¶ Возвращает версию строки байтов произвольного объекта
s
, закодированную, как указано вencoding
.Если
strings_only
естьTrue
, не конвертируйте (некоторые) объекты, не похожие на строки.
-
force_bytes
( s , encoding = 'utf-8' , strings_only = False , errors = 'strict' ) ¶ Аналогично
smart_bytes
, за исключением того, что ленивые экземпляры разрешаются в байтовые строки, а не хранятся как ленивые объекты.Если
strings_only
естьTrue
, не конвертируйте (некоторые) объекты, не похожие на строки.
-
smart_text
( s , encoding = 'utf-8' , strings_only = False , errors = 'strict' ) ¶ Не рекомендуется, начиная с версии 3.0.
Псевдоним
force_str()
для обратной совместимости, особенно в коде, поддерживающем Python 2.
-
force_text
( s , encoding = 'utf-8' , strings_only = False , errors = 'strict' ) ¶ Не рекомендуется, начиная с версии 3.0.
Псевдоним
force_str()
для обратной совместимости, особенно в коде, поддерживающем Python 2.
-
iri_to_uri
( ири ) ¶ Преобразуйте часть интернационализированного идентификатора ресурса (IRI) в часть URI, которая подходит для включения в URL.
Это алгоритм из раздела 3.1 RFC 3987 # section-3.1 , немного упрощенный, поскольку предполагается, что ввод является строкой, а не произвольным потоком байтов.
Принимает IRI (строку или байты UTF-8) и возвращает строку, содержащую закодированный результат.
-
uri_to_iri
( ури ) ¶ Преобразует унифицированный идентификатор ресурса в интернационализированный идентификатор ресурса.
Это алгоритм из раздела 3.2 RFC 3987 # раздел-3.2 .
Принимает URI в байтах ASCII и возвращает строку, содержащую закодированный результат.
-
filepath_to_uri
( путь ) ¶ Преобразуйте путь файловой системы в часть URI, которая подходит для включения в URL. Предполагается, что путь представляет собой байты UTF-8, строку или
Path
.Этот метод будет кодировать определенные символы, которые обычно распознаются как специальные символы для URI. Обратите внимание, что этот метод не кодирует символ ', поскольку это допустимый символ в URI. Смотрите
encodeURIComponent()
функцию JavaScript для более подробной информации.Возвращает строку ASCII, содержащую закодированный результат.
Изменено в Django 3.1:Поддержка была добавлена.
pathlib.Path
path
-
escape_uri_path
( путь ) ¶ Экранирует небезопасные символы из части пути универсального идентификатора ресурса (URI).
django.utils.feedgenerator
¶
Пример использования:
>>> from django.utils import feedgenerator
>>> feed = feedgenerator.Rss201rev2Feed(
... title="Poynter E-Media Tidbits",
... link="http://www.poynter.org/column.asp?id=31",
... description="A group Weblog by the sharpest minds in online media/journalism/publishing.",
... language="en",
... )
>>> feed.add_item(
... title="Hello",
... link="http://www.holovaty.com/test/",
... description="Testing.",
... )
>>> with open('test.rss', 'w') as fp:
... feed.write(fp, 'utf-8')
Для упрощения выбора генератора используйте, feedgenerator.DefaultFeed
который в настоящее времяRss201rev2Feed
Определения различных версий RSS см .: https://web.archive.org/web/20110718035220/http://diveintomark.org/archives/2004/02/04/incompatible-rss
-
get_tag_uri
( URL , дата ) ¶ Создает TagURI.
См. Https://web.archive.org/web/20110514113830/http://diveintomark.org/archives/2004/05/28/howto-atom-id
SyndicationFeed
¶
-
класс
SyndicationFeed
¶ Базовый класс для всех каналов распространения. Подклассы должны предоставлять write ().
-
__init__
( Название , ссылка , описание , язык = None , author_email = None , author_name = None , author_link = None , подзаголовок = None , категории = None , FEED_URL = None , feed_copyright = None , feed_guid = None , ТТЛ = None , ** kwargs ) ¶ Инициализируйте канал с заданным словарем метаданных, который применяется ко всему каналу.
Любые дополнительные аргументы ключевого слова, которым вы передадите,
__init__
будут сохраненыself.feed
.Все параметры должны быть строками, за исключением
categories
последовательности строк.
-
add_item
( название , ссылка , описание , author_email = Нет , author_name = Нет , author_link = Нет , pubdate = Нет , комментарии = Нет , unique_id = Нет , категории = () , item_copyright = Нет , ttl = Нет , updateddate = Нет , вложения = Нет , ** kwargs ) ¶ Добавляет элемент в ленту. Ожидается, что все аргументы будут строками, кроме
pubdate
иupdateddate
, которые являютсяdatetime.datetime
объектами, иenclosures
, которые являются спискомEnclosure
экземпляров.
-
num_items
() ¶
-
root_attributes
() ¶ Верните дополнительные атрибуты для размещения в корневом элементе (т. Е. Канал / канал). Вызывается из
write()
.
-
add_root_elements
( обработчик ) ¶ Добавьте элементы в корневой (т. Е. Канал / канал) элемент. Вызывается из
write()
.
-
item_attributes
( элемент ) ¶ Вернуть дополнительные атрибуты для размещения в каждом элементе элемента (например, элемент / запись).
-
add_item_elements
( обработчик , предмет ) ¶ Добавьте элементы в каждый элемент (например, элемент / запись).
-
write
( выход , кодировка ) ¶ Выводит канал в заданной кодировке
outfile
, который является файловым объектом. Подклассы должны преобладать над этим.
-
writeString
( кодировка ) ¶ Возвращает фид в заданной кодировке в виде строки.
-
latest_post_date
() ¶ Возвращает последний
pubdate
илиupdateddate
для всех элементов в ленте. Если ни один из элементов не имеет ни одного из этих атрибутов, возвращается текущая дата / время в формате UTC.
-
Rss201rev2Feed
¶
-
класс
Rss201rev2Feed
( RssFeed ) ¶ Спецификация: https://cyber.harvard.edu/rss/rss.html
RssUserland091Feed
¶
-
класс
RssUserland091Feed
( RssFeed ) ¶ Спецификация: http://backend.userland.com/rss091
django.utils.functional
¶
-
class
cached_property
( func , name = None ) [источник] ¶ @cached_property
Декоратора кэширует результат метода с однимself
аргументом в качестве свойства. Кешированный результат будет сохраняться до тех пор, пока экземпляр будет существовать, поэтому, если экземпляр передается и функция впоследствии вызывается, кешированный результат будет возвращен.Рассмотрим типичный случай, когда представлению может потребоваться вызвать метод модели для выполнения некоторых вычислений перед помещением экземпляра модели в контекст, где шаблон может вызвать метод еще раз:
# the model class Person(models.Model): def friends(self): # expensive computation ... return friends # in the view: if person.friends(): ...
А в шаблоне у вас будет:
{% for friend in person.friends %}
Здесь
friends()
будет называться дважды. Поскольку экземплярperson
в представлении и шаблон одинаковы, декорированиеfriends()
метода с помощью@cached_property
может избежать этого:from django.utils.functional import cached_property class Person(models.Model): @cached_property def friends(self): ...
Обратите внимание, что поскольку метод теперь является свойством, в коде Python к нему необходимо будет получить доступ соответствующим образом:
# in the view: if person.friends: ...
Кэшированное значение можно рассматривать как обычный атрибут экземпляра:
# clear it, requiring re-computation next time it's called del person.friends # or delattr(person, "friends") # set a value manually, that will persist on the instance until cleared person.friends = ["Huckleberry Finn", "Tom Sawyer"]
Из-за того, как работает протокол дескриптора , использование
del
(илиdelattr
) в a, кcached_property
которому не было доступа, возрастаетAttributeError
.Помимо потенциальных преимуществ в производительности, он
@cached_property
может гарантировать, что значение атрибута не изменится неожиданно в течение срока службы экземпляра. Это могло произойти с методом, на котором основаны вычисленияdatetime.now()
, или если изменение было сохранено в базе данных каким-либо другим процессом в короткий интервал между последующими вызовами метода в том же экземпляре.Вы можете делать кешированные свойства методов. Например, если у вас есть дорогой
get_friends()
метод и вы хотите разрешить его вызов без извлечения кэшированного значения, вы можете написать:friends = cached_property(get_friends, name='friends')
Вам нужен только
name
аргумент для поддержки Python <3.6.Хотя
person.get_friends()
будет пересчитывать друзей при каждом вызове, значение кэшированного свойства будет сохраняться до тех пор, пока вы не удалите его, как описано выше:x = person.friends # calls first time y = person.get_friends() # calls again z = person.friends # does not call x is z # is True
-
class
classproperty
( method = None ) [источник] ¶ - Новое в Django 3.1.
Подобно этому
@classmethod
,@classproperty
декоратор преобразует результат метода с однимcls
аргументом в свойство, к которому можно получить доступ непосредственно из класса.
-
keep_lazy
( func , * resultclasses ) [источник] ¶ Django предлагает множество служебных функций (особенно в
django.utils
), которые принимают строку в качестве первого аргумента и что-то делают с этой строкой. Эти функции используются фильтрами шаблонов, а также непосредственно в другом коде.Если вы напишете свои собственные аналогичные функции и будете иметь дело с переводами, вы столкнетесь с проблемой, что делать, когда первым аргументом является объект ленивого перевода. Вы не хотите сразу преобразовывать его в строку, потому что вы можете использовать эту функцию вне представления (и, следовательно, настройка локали текущего потока будет неправильной).
Для подобных случаев используйте
django.utils.functional.keep_lazy()
декоратор. Он изменяет функцию таким образом, что если она вызывается с отложенным переводом в качестве одного из аргументов, оценка функции откладывается до тех пор, пока ее не потребуется преобразовать в строку.Например:
from django.utils.functional import keep_lazy, keep_lazy_text def fancy_utility_function(s, ...): # Do some conversion on string 's' ... fancy_utility_function = keep_lazy(str)(fancy_utility_function) # Or more succinctly: @keep_lazy(str) def fancy_utility_function(s, ...): ...
keep_lazy()
Декоратор принимает ряд дополнительных аргументов (*args
) , указав тип (ы) , что исходная функция может возвращать. Обычно используются функции, возвращающие текст. Для них вы можете передатьstr
типkeep_lazy
(или использоватьkeep_lazy_text()
декоратор, описанный в следующем разделе).Использование этого декоратора означает, что вы можете написать свою функцию и предположить, что ввод является правильной строкой, а затем добавить поддержку объектов ленивого перевода в конце.
-
keep_lazy_text
( func ) [источник] ¶ Ярлык для
keep_lazy(str)(func)
.Если у вас есть функция, которая возвращает текст, и вы хотите иметь возможность принимать ленивые аргументы, откладывая их оценку, вы можете использовать этот декоратор:
from django.utils.functional import keep_lazy, keep_lazy_text # Our previous example was: @keep_lazy(str) def fancy_utility_function(s, ...): ... # Which can be rewritten as: @keep_lazy_text def fancy_utility_function(s, ...): ...
django.utils.html
¶
Обычно вы должны создавать HTML, используя шаблоны Django, чтобы использовать его механизм автоэскейпа, используя там, django.utils.safestring
где это необходимо, служебные программы . Этот модуль предоставляет некоторые дополнительные низкоуровневые утилиты для экранирования HTML.
-
escape
( текст ) ¶ Возвращает заданный текст с амперсандами, кавычками и угловыми скобками, закодированными для использования в HTML. Сначала вводится строка, а вывод
mark_safe()
применяется.
-
conditional_escape
( текст ) ¶ Аналогично
escape()
, за исключением того, что он не работает с предварительно экранированными строками, поэтому он не будет выполнять двойное экранирование.
-
format_html
( format_string , * args , ** kwargs ) ¶ Это похоже на
str.format()
, за исключением того, что подходит для создания фрагментов HTML. Все аргументы и kwargsconditional_escape()
перед передачей передаютсяstr.format()
.В случае создания небольших фрагментов HTML эта функция должна быть предпочтительнее интерполяции строк с использованием
%
илиstr.format()
напрямую, потому что она применяет экранирование ко всем аргументам - точно так же, как система шаблонов применяет экранирование по умолчанию.Итак, вместо того, чтобы писать:
mark_safe("%s <b>%s</b> %s" % ( some_html, escape(some_text), escape(some_other_text), ))
Вместо этого вы должны использовать:
format_html("{} <b>{}</b> {}", mark_safe(some_html), some_text, some_other_text, )
Это имеет то преимущество, что вам не нужно применять
escape()
к каждому аргументу и рисковать ошибкой и уязвимостью XSS, если вы ее забудете.Обратите внимание, что хотя эта функция используется
str.format()
для интерполяции, некоторые параметры форматирования, предоставляемые еюstr.format()
(например, форматирование чисел), не будут работать, поскольку передаются все аргументы, черезconditional_escape()
которые (в конечном итоге) вызываютсяforce_str()
значения.
-
format_html_join
( sep , format_string , args_generator ) ¶ Обертка
format_html()
для общего случая группы аргументов, которые необходимо отформатировать с использованием одной и той же строки формата, а затем объединить с помощьюsep
.sep
также проходитconditional_escape()
.args_generator
должен быть итератором, который возвращает последовательность,args
которая будет переданаformat_html()
. Например:format_html_join( '\n', "<li>{} {}</li>", ((u.first_name, u.last_name) for u in users) )
Пытается удалить из строки все, что выглядит как HTML-тег, то есть все, что содержится внутри
<>
.Абсолютно НИКАКИХ гарантий, что полученная строка безопасна для HTML, не дается. Поэтому НИКОГДА не помечайте как безопасный результат
strip_tag
вызова без предварительного экранирования, например, с помощьюescape()
.Например:
strip_tags(value)
Если
value
- возвращаемое значение будет ."<b>Joel</b> <button>is</button> a <span>slug</span>"
"Joel is a slug"
Если вы ищете более надежное решение, обратите внимание на библиотеку bleach Python.
-
html_safe
() ¶ __html__()
Метод на классе помогает шаблонам без Джанго обнаружить классы, вывод не требует HTML маскирования.Этот декоратор определяет
__html__()
метод на украшенном классе, обернув__str__()
вmark_safe()
. Убедитесь, что__str__()
метод действительно возвращает текст, который не требует экранирования HTML.
django.utils.http
¶
-
urlencode
( запрос , доза q = Ложь ) ¶ Версия функции Python,
urllib.parse.urlencode()
которая может работать сMultiValueDict
нестроковыми значениями.
-
http_date
( epoch_seconds = Нет ) ¶ Форматирует время в соответствии с RFC 1123 # section-5.2.14 формат даты, указанный в HTTPRFC 7231 # section-7.1.1.1 .
Принимает число с плавающей запятой, выраженное в секундах с момента времени в формате UTC, например, выводимое с помощью
time.time()
. Если установленоNone
, по умолчанию используется текущее время.Выводит строку в формате .
Wdy, DD Mon YYYY HH:MM:SS GMT
-
base36_to_int
( s ) ¶ Преобразует строку с основанием 36 в целое число.
-
int_to_base36
( i ) ¶ Преобразует положительное целое число в строку с основанием 36.
-
urlsafe_base64_encode
( s ) ¶ Кодирует байтовую строку в строку base64 для использования в URL-адресах, удаляя любые конечные знаки равенства.
-
urlsafe_base64_decode
( s ) ¶ Декодирует строку в кодировке base64, добавляя любые конечные знаки равенства, которые могли быть удалены.
django.utils.module_loading
¶
Функции для работы с модулями Python.
-
import_string
( dotted_path ) [источник] ¶ Импортирует разделенный точками путь к модулю и возвращает атрибут / класс, обозначенный фамилией в пути. Возникает,
ImportError
если импорт не удался. Например:from django.utils.module_loading import import_string ValidationError = import_string('django.core.exceptions.ValidationError')
эквивалентно:
from django.core.exceptions import ValidationError
django.utils.safestring
¶
Функции и классы для работы с «безопасными строками»: строки, которые можно безопасно отображать без дальнейшего экранирования в HTML. Пометка чего-либо как «безопасной строки» означает, что производитель строки уже превратил символы, которые не должны интерпретироваться механизмом HTML (например, '<'), в соответствующие объекты.
-
класс
SafeString
[источник] ¶ str
Подкласс , который был специально отмечен как «безопасный» (не требует дальнейшей вытекание) для вывода HTML целей.
-
mark_safe
( s ) [источник] ¶ Явно пометьте строку как безопасную для целей вывода (HTML). Возвращенный объект можно использовать везде, где подходит строка.
Может вызываться несколько раз для одной строки.
Также может использоваться как декоратор.
Для создания фрагментов HTML вы обычно должны использовать
django.utils.html.format_html()
вместо него.Строка, помеченная как безопасная, снова станет небезопасной в случае изменения. Например:
>>> mystr = '<b>Hello World</b> ' >>> mystr = mark_safe(mystr) >>> type(mystr) <class 'django.utils.safestring.SafeString'> >>> mystr = mystr.strip() # removing whitespace >>> type(mystr) <type 'str'>
django.utils.text
¶
-
format_lazy
( format_string , * args , ** kwargs ) ¶ Версия
str.format()
для когдаformat_string
,args
и / илиkwargs
содержать ленивые объекты. Первый аргумент - это форматируемая строка. Например:from django.utils.text import format_lazy from django.utils.translation import pgettext_lazy urlpatterns = [ path(format_lazy('{person}/<int:pk>/', person=pgettext_lazy('URL', 'person')), PersonDetailView.as_view()), ]
Этот пример позволяет переводчикам переводить часть URL-адреса. Если «человек» переводится как «персона», регулярное выражение будет соответствовать
persona/(?P<pk>\d+)/$
, напримерpersona/5/
.
-
slugify
( значение , allow_unicode = False ) ¶ Преобразует строку в URL-адрес:
- Преобразование в ASCII, если
allow_unicode
естьFalse
(по умолчанию). - Преобразование в нижний регистр.
- Удаление символов, не являющихся буквенно-цифровыми, подчеркиваниями, дефисами или пробелами.
- Замена любых пробелов или повторяющихся дефисов одиночными дефисами.
- Удаление начальных и конечных пробелов, дефисов и подчеркиваний.
Например:
>>> slugify(' Joel is a slug ') 'joel-is-a-slug'
Если вы хотите разрешить использование символов Юникода, пройдите
allow_unicode=True
. Например:>>> slugify('你好 World', allow_unicode=True) '你好-world'
Изменено в Django 3.2:В более старых версиях начальные и конечные дефисы и подчеркивания не удаляются.
- Преобразование в ASCII, если
django.utils.timezone
¶
-
get_fixed_timezone
( смещение ) ¶ Возвращает
tzinfo
экземпляр, представляющий часовой пояс с фиксированным смещением от UTC.offset
представляетdatetime.timedelta
собой целое число минут. Используйте положительные значения для часовых поясов к востоку от UTC и отрицательные значения к западу от UTC.
-
get_default_timezone
() ¶ Возвращает
tzinfo
экземпляр, представляющий часовой пояс по умолчанию .
-
get_default_timezone_name
() ¶ Возвращает название часового пояса по умолчанию .
-
get_current_timezone
() ¶ Возвращает
tzinfo
экземпляр, представляющий текущий часовой пояс .
-
get_current_timezone_name
() ¶ Возвращает название текущего часового пояса .
-
activate
( часовой пояс ) ¶ Устанавливает текущий часовой пояс .
timezone
Аргумент должен быть экземпляромtzinfo
подкласса или имя часового пояса.
-
deactivate
() ¶ Сбрасывает текущий часовой пояс .
-
override
( часовой пояс ) ¶ Это диспетчер контекста Python, который устанавливает текущий часовой пояс при входе
activate()
и восстанавливает ранее активный часовой пояс при выходе. Еслиtimezone
аргумент равенNone
, текущий часовой пояс не устанавливается при входе сdeactivate()
.override
также можно использовать в качестве декоратора функций.
-
localtime
( значение = Нет , часовой пояс = Нет ) ¶ Преобразует осведомленный
datetime
в другой часовой пояс, по умолчанию текущий часовой пояс .Если
value
не указано, по умолчанию используетсяnow()
.Эта функция не работает на простых датах; используйте
make_aware()
вместо этого.
-
localdate
( значение = Нет , часовой пояс = Нет ) ¶ Использование
localtime()
для преобразования осознаваемогоdatetime
кdate()
в другом часовом поясе, по умолчанию текущего часового пояса .Если
value
не указано, по умолчанию используетсяnow()
.Эта функция не работает на простых датах.
-
now
() ¶ Возвращает
datetime
, представляющий текущий момент времени. Что именно возвращается, зависит от значенияUSE_TZ
:- Если
USE_TZ
естьFalse
, то это будет наивный DateTime (т.е. Заданы без соответствующей временной зоны) , которая представляет текущее время в локальном часовом поясе системы. - Если
USE_TZ
естьTrue
, то это будет знать , дата и время , представляющее текущее время в формате UTC. Обратите внимание, что времяnow()
всегда будет возвращаться в формате UTC независимо от значенияTIME_ZONE
; вы можете использоватьlocaltime()
для получения времени в текущем часовом поясе.
- Если
-
is_aware
( значение ) ¶ Возвращает,
True
еслиvalue
в курсе,False
если наивно. Эта функция предполагает, чтоvalue
это файлdatetime
.
-
is_naive
( значение ) ¶ Возвращает,
True
еслиvalue
наивно,False
если в курсе. Эта функция предполагает, чтоvalue
это файлdatetime
.
-
make_aware
( значение , часовой пояс = Нет , is_dst = Нет ) ¶ Возвращает осведомленность
datetime
, представляющую тот же момент времени, что иvalue
вtimezone
,value
будучи наивнымdatetime
. Еслиtimezone
установлено значениеNone
, по умолчанию используется текущий часовой пояс .При использовании
pytz
, тоpytz.AmbiguousTimeError
возбуждается исключение , если вы пытаетесь сделать вvalue
курсе во время перехода ДСТ , где в то же время происходит дважды (при отмене из DST). Настройкаis_dst
наTrue
илиFalse
позволит избежать исключения, выбрав время до перехода или после перехода соответственно.При использовании
pytz
, тоpytz.NonExistentTimeError
возбуждается исключение , если вы пытаетесь сделать вvalue
курсе во время летнего времени перехода, что время не произошло. Например, если 2 часа пропущены во время перехода на летнее время, попытка сообщить 2:30 в этом часовом поясе вызовет исключение. Чтобы избежать этого, вы можете использовать,is_dst
чтобы указать, какmake_aware()
следует интерпретировать такое несуществующее время. Еслиis_dst=True
тогда указанное выше время будет интерпретировано как 2:30 по летнему времени (эквивалентно 1:30 по местному времени). И наоборот, еслиis_dst=False
бы время интерпретировалось как 2:30 по стандартному времени (эквивалент 3:30 по местному времени).is_dst
Параметр не имеет никакого эффекта при использовании Непро-pytz
реализации часового пояса.
-
make_naive
( значение , часовой пояс = Нет ) ¶ Возвращает наивное,
datetime
которое представляет вtimezone
тот же момент времениvalue
,value
что и осознающееdatetime
. Еслиtimezone
установлено значениеNone
, по умолчанию используется текущий часовой пояс .
django.utils.translation
¶
Полное обсуждение использования следующего см. В документации по переводу .
-
gettext
( сообщение ) ¶ Переводит
message
и возвращает его как строку.
-
pgettext
( контекст , сообщение ) ¶ Переводит
message
данное значениеcontext
и возвращает его в виде строки.Для получения дополнительной информации см. Контекстные маркеры .
-
gettext_lazy
( сообщение ) ¶
-
pgettext_lazy
( контекст , сообщение ) ¶ То же, что и вышеприведенные неленивые версии, но с ленивым выполнением.
-
gettext_noop
( сообщение ) ¶ Помечает строки для перевода, но не переводит их сейчас. Это можно использовать для хранения строк в глобальных переменных, которые должны оставаться на базовом языке (потому что они могут использоваться извне) и будут переведены позже.
-
ngettext
( единственное , множественное , число ) ¶ Переводит
singular
иplural
возвращает соответствующую строку на основеnumber
.
-
npgettext
( контекст , единственное число , множественное число , число ) ¶ Переводит
singular
иplural
возвращает соответствующую строку на основеnumber
иcontext
.
-
ngettext_lazy
( единственное , множественное , число ) ¶
-
npgettext_lazy
( контекст , единственное число , множественное число , число ) ¶ То же, что и вышеприведенные неленивые версии, но с ленивым выполнением.
-
activate
( язык ) ¶ Выбирает объект перевода для заданного языка и активирует его как текущий объект перевода для текущего потока.
-
deactivate
() ¶ Деактивирует текущий активный объект перевода, так что дальнейшие вызовы _ снова будут разрешаться против объекта перевода по умолчанию.
-
deactivate_all
() ¶ Делает активный объект перевода
NullTranslations()
экземпляром. Это полезно, когда мы хотим, чтобы отложенные переводы по какой-то причине отображались как исходная строка.
-
override
( Язык , Деактивировать = False ) ¶ Диспетчер контекста Python, который использует
django.utils.translation.activate()
объект перевода для данного языка, активирует его как объект перевода для текущего потока и повторно активирует предыдущий активный язык при выходе. При желании он может деактивировать временный перевод при выходе,django.utils.translation.deactivate()
еслиdeactivate
аргумент равенTrue
. Если вы передаетеNone
в качестве аргумента языка,NullTranslations()
экземпляр активируется в контексте.override
также можно использовать в качестве декоратора функций.
-
check_for_language
( lang_code ) ¶ Проверяет, существует ли глобальный языковой файл для данного языкового кода (например, 'fr', 'pt_BR'). Это используется, чтобы решить, доступен ли язык, заданный пользователем.
-
get_language
() ¶ Возвращает текущий выбранный языковой код. Возвращает,
None
если переводы временно деактивированы (доdeactivate_all()
или когдаNone
переданыoverride()
).
-
get_language_bidi
() ¶ Возвращает макет BiDi для выбранного языка:
False
= макет слева направоTrue
= макет с письмом справа налево
-
get_language_from_request
( запрос , check_path = False ) ¶ Анализирует запрос, чтобы определить, какой язык пользователь хочет, чтобы система отображала. Учитываются только языки, указанные в настройках. ЯЗЫКИ. Если пользователь запрашивает подъязык, на котором у нас есть основной язык, мы отправляем основной язык.
Если
check_path
естьTrue
, то функция сначала проверяет запрошенный URL для начала ли его путь с кодом языка , указанным вLANGUAGES
настройке.
-
get_supported_language_variant
( lang_code , strict = False ) ¶ Возвращает,
lang_code
если он находится вLANGUAGES
настройке, возможно, выбирая более общий вариант. Например,'es'
возвращается, еслиlang_code
есть,'es-ar'
и'es'
есть,LANGUAGES
но'es-ar'
нет.Если
strict
естьFalse
(по умолчанию), вариант для конкретной страны может быть возвращен, если ни код языка, ни его общий вариант не найдены. Например, если only'es-co'
is inLANGUAGES
, это возвращается дляlang_code
s like'es'
и'es-ar'
. Эти совпадения не возвращаются, еслиstrict=True
.Повышается,
LookupError
если ничего не найдено.
-
to_locale
( язык ) ¶ Превращает название языка (en-us) в название языка (en_US).
-
templatize
( SRC ) ¶ Превращает шаблон Django в то, что понимают
xgettext
. Это достигается путем перевода тегов перевода Django в стандартныеgettext
вызовы функций.
-
LANGUAGE_SESSION_KEY
¶ Ключ сеанса, под которым сохраняется активный язык для текущего сеанса.
Не рекомендуется с версии 3.0: Язык не будет сохранен в сеансе Django 4.0.
LANGUAGE_COOKIE_NAME
Вместо этого используйте cookie.