Utilitaires Django¶
Ce document présente tous les modules stables dans django.utils
. La plupart des modules dans django.utils
sont conçus pour un usage interne et seuls les parties documentĂ©es ici peuvent ĂȘtre considĂ©rĂ©es comme stables et donc rĂ©trocompatibles, selon la politique interne dâobsolescence de publication.
django.utils.cache
¶
Ce module contient des fonctions utilitaires pour le contrĂŽle du cache HTTP. Il opĂšre en manipulant lâen-tĂȘte Vary
des rĂ©ponses. Il contient des fonctions pour modifier directement lâen-tĂȘte des objets rĂ©ponse ainsi que des dĂ©corateurs qui modifient les fonctions afin quâelle se chargent elles-mĂȘmes de la modification des en-tĂȘtes.
Pour plus dâinformations sur lâen-tĂȘte Vary
, voir la RFC 9110#section-12.5.5.
Ă la base, lâen-tĂȘte HTTP Vary
dĂ©finit quels en-tĂȘtes de requĂȘte un cache doit prendre en considĂ©ration pour gĂ©nĂ©rer sa clĂ© de cache. Les requĂȘtes vers un mĂȘme chemin mais contenant des contenus dâen-tĂȘte diffĂ©rents pour les en-tĂȘtes mentionnĂ©s dans Vary
ont besoin de produire des clés de cache différentes pour ne pas délivrer de mauvais contenu.
Par exemple, lâintergiciel dâinternationalisation doit pouvoir mettre en cache des versions diffĂ©rentes en fonction de lâen-tĂȘte Accept-language
.
-
patch_cache_control
(response, **kwargs)¶ Cette fonction complĂšte lâen-tĂȘte
Cache-Control
en y ajoutant tous les paramÚtres nommés. La transformation se fait comme suit :- Tous les paramÚtres nommés sont transformés en minuscules et les soulignements sont convertis en tirets.
- Si la valeur dâun paramĂštre est
True
(exactementTrue
, pas seulement une valeur Ă©valuĂ©e ĂTrue
), seul le nom du paramĂštre est ajoutĂ© Ă lâen-tĂȘte. - Tous les autres paramĂštres sont ajoutĂ©s avec leur valeur, aprĂšs avoir passĂ© par la fonction
str()
.
-
get_max_age
(response)¶ Renvoie la valeur
max-age
de lâen-tĂȘte de rĂ©ponseCache-Control
sous forme de nombre entier (ouNone
sâil nâexiste pas ou quâil nâest pas un nombre entier).
-
patch_response_headers
(response, cache_timeout=None)¶ Ajoute certains en-tĂȘtes utiles Ă lâobjet
HttpResponse
donné :Expires
Cache-Control
Chaque en-tĂȘte nâest ajoutĂ© que sâil nâest pas dĂ©jĂ prĂ©sent.
cache_timeout
est en secondes. Le réglageCACHE_MIDDLEWARE_SECONDS
est utilisé par défaut.
-
add_never_cache_headers
(response)¶ Ajoute un en-tĂȘte
Expires
Ă la date actuelle.Ajoute un en-tĂȘte
Cache-Control: max-age=0, no-cache, no-store, must-revalidate, private
Ă une rĂ©ponse pour indiquer que la page ne doit jamais ĂȘtre mise en cache.Chaque en-tĂȘte nâest ajoutĂ© que sâil nâest pas dĂ©jĂ prĂ©sent.
-
patch_vary_headers
(response, newheaders)¶ Ajoute (ou met Ă jour) lâen-tĂȘte
Vary
dans lâobjetHttpResponse
donné.newheaders
est une liste de noms dâen-tĂȘtes qui doivent se trouver dansVary
. Si les en-tĂȘtes contiennent un astĂ©risque, lâen-tĂȘteVary
consistera en un seul astérisque'*'
, selon la RFC 9110#section-12.5.5. Sinon, les en-tĂȘtes existants dansVary
ne sont pas enlevés.
-
get_cache_key
(request, key_prefix=None, method='GET', cache=None)¶ Renvoie une clĂ© de cache basĂ©e sur le chemin de requĂȘte. Cette mĂ©thode peut ĂȘtre utilisĂ©e dans la phase de requĂȘte car elle extrait la liste dâen-tĂȘtes Ă prendre en compte Ă partir du registre global de chemin et utilise ces en-tĂȘtes pour construire une clĂ© de cache Ă utiliser.
Si aucune liste dâen-tĂȘte nâest stockĂ©e, la page doit ĂȘtre reconstruite et cette fonction renvoie donc
None
.
-
learn_cache_key
(request, response, cache_timeout=None, key_prefix=None, cache=None)¶ Apprend quels en-tĂȘtes Ă prendre en compte pour un certain chemin de requĂȘte Ă partir de lâobjet rĂ©ponse. Elle stocke ces en-tĂȘtes dans un registre global de chemins afin que tout accĂšs ultĂ©rieur Ă ce chemin sache les en-tĂȘtes Ă prendre en compte sans devoir construire lâobjet rĂ©ponse lui-mĂȘme. Les en-tĂȘtes sont nommĂ©s dans lâen-tĂȘte
Vary
de la rĂ©ponse, mais il sâagit dâĂ©viter de devoir gĂ©nĂ©rer la rĂ©ponse.La liste des en-tĂȘtes Ă utiliser pour la gĂ©nĂ©ration de la clĂ© de cache est stockĂ©e dans le mĂȘme cache que les pages elles-mĂȘmes. Si le cache rejette certaines vieilles donnĂ©es du cache, cela signifie quâil faut reconstruire une fois la rĂ©ponse pour avoir accĂšs Ă lâen-tĂȘte
Vary
et par lĂ Ă la liste des en-tĂȘtes Ă utiliser pour la clĂ© de cache.
django.utils.dateparse
¶
Les fonctions définies dans ce module partagent les propriétés suivantes :
- Elles acceptent les chaĂźnes aux formats date/heure ISO 8601 (ou certaines alternatives proches) et renvoient des objets des classes correspondantes du module Python
datetime
. - Elles génÚrent une exception
ValueError
si la valeur dâentrĂ©e est correctement mise en forme mais quâelle ne correspond pas Ă une date ou heure valable. - Elles renvoient
None
si la valeur dâentrĂ©e nâest pas correctement mise en forme. - Elles acceptent une rĂ©solution de valeur dâentrĂ©e jusquâĂ la picoseconde, mais elles tronquent Ă la microseconde car câest la rĂ©solution maximale gĂ©rĂ©e par Python.
-
parse_date
(value)¶ Analyse une chaßne et renvoie un objet
datetime.date
.
-
parse_time
(value)¶ Analyse une chaßne et renvoie un objet
datetime.time
.Les décalages UTC ne sont pas pris en charge ; si
value
en contient un, le résultat seraNone
.
-
parse_datetime
(value)¶ Analyse une chaßne et renvoie un objet
datetime.datetime
.Les décalages UTC sont pris en charge ; si
value
en contient un, lâattributtzinfo
du résultat sera une instancedatetime.timezone
.
-
parse_duration
(value)¶ Analyse une chaßne et renvoie un objet
datetime.timedelta
.Sâattend Ă recevoir des donnĂ©es au format
"JJ HH:MM:SS.uuuuuu"
,"DD HH:MM:SS,uuuuuu"
ou tel que défini par ISO 8601 (par ex.P4DT1H15M20S
ce qui est Ă©quivalent Ă4 1:15:20
), ou au format dâintervalle jour-heure de PostgreSQL (par ex.3 days 04:05:06
).
django.utils.decorators
¶
-
method_decorator
(decorator, name='')[source]¶ Convertit un dĂ©corateur de fonction en un dĂ©corateur de mĂ©thode. Cette fonction peut ĂȘtre utilisĂ©e pour dĂ©corer des mĂ©thodes ou des classes ; dans ce dernier cas,
name
est le nom de la méthode à décorer et est obligatoire.decorator
peut aussi ĂȘtre une liste ou un tuple de fonctions. Celles-ci sont dĂ©corĂ©es dans lâordre inverse, ce qui fait que lâordre dâappel est le mĂȘme que celui dans lequel les fonctions apparaissent dans la liste.Voir dĂ©coration des vues fondĂ©es sur les classes pour un exemple dâutilisation.
-
decorator_from_middleware
(middleware_class)[source]¶ Renvoie un dĂ©corateur de vue Ă partir dâune classe dâintergiciel. Cela permet dâutiliser des fonctionnalitĂ©s dâintergiciel pour certaines vues seulement. Lâintergiciel est créé sans aucun paramĂštre.
Il sâattend Ă des intergiciels compatibles avec lâancien style de Django jusquâĂ 1.9 (en ayant des mĂ©thodes comme
process_request()
,process_exception()
etprocess_response()
).
-
decorator_from_middleware_with_args
(middleware_class)[source]¶ Comme
decorator_from_middleware
, mais renvoie une fonction qui accepte des paramĂštres Ă transmettre Ă la classemiddleware_class
. Par exemple, le décorateurcache_page()
est créé à partir deCacheMiddleware
comme ceci :cache_page = decorator_from_middleware_with_args(CacheMiddleware) @cache_page(3600) def my_view(request): pass
-
sync_only_middleware
(middleware)[source]¶ Marque un intergiciel comme purement synchrone (par dĂ©faut dans Django, mais cela ajoute une robustesse supplĂ©mentaire au cas oĂč la valeur par dĂ©faut devait changer dans le futur).
-
async_only_middleware
(middleware)[source]¶ Marque un intergiciel comme purement asynchrone. Django va lâenvelopper dans une boucle Ă©vĂ©nementielle asynchrone lorsquâil est appelĂ© Ă partir dâun chemin de requĂȘte WSGI.
-
sync_and_async_middleware
(middleware)[source]¶ Marque un intergiciel comme compatible synchrone et asynchrone, ce qui Ă©vite de devoir convertir les requĂȘtes. Vous devez implĂ©menter la dĂ©tection du type de requĂȘte actuel pour utiliser ce dĂ©corateur. Voir la documentation des intergiciels asynchrones pour plus de dĂ©tails.
django.utils.encoding
¶
-
smart_str
(s, encoding='utf-8', strings_only=False, errors='strict')[source]¶ Renvoie un objet
str
représentant un objet arbitraires
. Traite les chaĂźnes dâoctets en utilisant le codageencoding
.Si
strings_only
estTrue
, ne convertit pas certains objets non assimilables Ă des chaĂźnes.
-
is_protected_type
(obj)[source]¶ DĂ©termine si lâinstance dâobjet est dâun type protĂ©gĂ©.
Les objets dâun type protĂ©gĂ© sont prĂ©servĂ©s tels quels lorsquâils sont transmis Ă
force_str(strings_only=True)
.
-
force_str
(s, encoding='utf-8', strings_only=False, errors='strict')[source]¶ Semblable Ă
smart_str()
, sauf que les instances différées sont évaluées en chaßnes, plutÎt que de conserver leur état différé.Si
strings_only
estTrue
, ne convertit pas certains objets non assimilables Ă des chaĂźnes.
-
smart_bytes
(s, encoding='utf-8', strings_only=False, errors='strict')[source]¶ Renvoie une version de lâobjet arbitraire
s
sous forme de chaĂźne dâoctets, en utilisant le codage indiquĂ© dansencoding
.Si
strings_only
estTrue
, ne convertit pas certains objets non assimilables Ă des chaĂźnes.
-
force_bytes
(s, encoding='utf-8', strings_only=False, errors='strict')[source]¶ Semblable Ă
smart_bytes
, sauf que les instances diffĂ©rĂ©es sont Ă©valuĂ©es en chaĂźnes dâoctets, plutĂŽt que de conserver leur Ă©tat diffĂ©rĂ©.Si
strings_only
estTrue
, ne convertit pas certains objets non assimilables Ă des chaĂźnes.
-
iri_to_uri
(iri)[source]¶ Convertit une portion dâidentifiant de ressource internationalisĂ© (IRI) en portion dâURI qui convient pour lâinclusion dans une URL.
Il sâagit de lâalgorithme de la section 3.1 de la RFC 3987#section-3.1, lĂ©gĂšrement simplifiĂ©e dans la mesure oĂč lâon admet que la valeur dâentrĂ©e est une chaĂźne et non pas un flux binaire arbitraire.
Accepte une IRI (chaßne ou octets UTF-8) et renvoie une chaßne contenant le résultat encodé.
-
uri_to_iri
(uri)[source]¶ Convertit une URI (Uniform Resource Identifier) en une IRI (Internationalized Resource Identifier).
Il sâagit dâun algorithme inspirĂ© de la section 3.2 de la RFC 3987#section-3.2.
Accepte une URI en octets ASCII et renvoie une chaßne contenant le résultat encodé.
-
filepath_to_uri
(path)[source]¶ Convertit un chemin de systĂšme de fichiers en une portion dâURI convenable pour son inclusion dans une URL. Le chemin en entrĂ©e doit ĂȘtre soit des octets UTF-8, une chaĂźne ou un chemin
Path
.Cette mĂ©thode code certains caractĂšres qui sont normalement identifiĂ©s comme des caractĂšres spĂ©ciaux dans les URI. Notez que cette mĂ©thode ne code pas le caractĂšre « â » car câest un caractĂšre acceptĂ© dans les URI. Voir la fonction JavaScript
encodeURIComponent()
pour plus de détails.Renvoie une chaßne ASCII contenant le résultat encodé.
django.utils.feedgenerator
¶
Exemple dâutilisation :
>>> 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 blog 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")
...
Pour simplifier la sĂ©lection dâun gĂ©nĂ©rateur, utilisez feedgenerator.DefaultFeed
qui est actuellement Rss201rev2Feed
.
Pour les définitions des différentes versions de RSS, voir https://web.archive.org/web/20110718035220/http://diveintomark.org/archives/2004/02/04/incompatible-rss
-
get_tag_uri
(url, date)[source]¶ Crée un
TagURI
.Voir https://web.archive.org/web/20110514113830/http://diveintomark.org/archives/2004/05/28/howto-atom-id
SyndicationFeed
¶
-
class
SyndicationFeed
[source]¶ Classe de base pour tous les flux de syndication. Les sous-classes doivent implémenter
write()
.-
__init__
(title, link, description, language=None, author_email=None, author_name=None, author_link=None, subtitle=None, categories=None, feed_url=None, feed_copyright=None, feed_guid=None, ttl=None, **kwargs)[source]¶ Initialise le flux avec le dictionnaire de mĂ©tadonnĂ©es indiquĂ©, qui sâapplique au flux entier.
Tout paramĂštre nommĂ© supplĂ©mentaire passĂ© Ă
__init__
est stocké dansself.feed
.Tous les paramĂštres doivent ĂȘtre des chaĂźnes, Ă lâexception de
categories
, qui doit ĂȘtre une liste de chaĂźnes.
-
add_item
(title, link, description, author_email=None, author_name=None, author_link=None, pubdate=None, comments=None, unique_id=None, categories=(), item_copyright=None, ttl=None, updateddate=None, enclosures=None, **kwargs)[source]¶ Ajoute un Ă©lĂ©ment au flux. Tous les paramĂštres sont censĂ©s ĂȘtre des chaĂźnes, sauf
pubdate
etupdateddate
qui doivent ĂȘtre des objetsdatetime.datetime
, etenclosures
qui doit ĂȘtre une liste dâinstancesEnclosure
.
-
root_attributes
()[source]¶ Renvoie des attributs supplĂ©mentaires Ă ajouter Ă lâĂ©lĂ©ment racine (câest-Ă -dire le flux ou canal). AppelĂ© depuis
write()
.
-
add_root_elements
(handler)[source]¶ Ajoute des Ă©lĂ©ments Ă lâĂ©lĂ©ment racine (câest-Ă -dire le flux ou canal). AppelĂ© depuis
write()
.
-
item_attributes
(item)[source]¶ Renvoie des attributs supplémentaires à placer dans chaque élément du flux.
-
Rss201rev2Feed
¶
-
class
Rss201rev2Feed
(RssFeed)[source]¶ Spécification : https://cyber.harvard.edu/rss/rss.html
RssUserland091Feed
¶
-
class
RssUserland091Feed
(RssFeed)[source]¶ Spécification : http://backend.userland.com/rss091
django.utils.functional
¶
-
class
cached_property
(func, name=None)[source]¶ Le décorateur
@cached_property
met en cache le rĂ©sultat dâune mĂ©thode ayant un seul paramĂštreself
sous forme de propriĂ©tĂ©. Le rĂ©sultat en cache persiste aussi longtemps que lâinstance, ce qui fait que si lâinstance est conservĂ©e et que la fonction est appelĂ©e une nouvelle fois plus tard, le rĂ©sultat en cache est renvoyĂ©.ConsidĂ©rons un cas typique oĂč une vue a besoin dâappeler la mĂ©thode dâun modĂšle pour effectuer un certain calcul avant de placer cette instance de modĂšle dans le contexte passĂ© au gabarit, et celui-ci a aussi besoin dâappeler la mĂ©thode une nouvelle fois :
# the model class Person(models.Model): def friends(self): # expensive computation ... return friends # in the view: if person.friends(): ...
Et dans le gabarit, vous auriez :
{% for friend in person.friends %}
friends()
sera ici appelée deux fois. Puisque les instancesperson
dans la vue et dans le gabarit reprĂ©sentent la mĂȘme instance, dĂ©corer la mĂ©thodefriends()
avec@cached_property
permet dâĂ©viter celafrom django.utils.functional import cached_property class Person(models.Model): @cached_property def friends(self): ...
Notez que la méthode étant maintenant devenue une propriété, le code Python doit y accéder de maniÚre adéquate :
# in the view: if person.friends: ...
La valeur en cache peut ĂȘtre traitĂ©e comme nâimporte quel autre attribut normal de lâinstance :
# 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"]
En raison du fonctionnement du protocole de descripteur, lâutilisation de
del
(oudelattr
) sur une propriété décorée parcached_property
qui nâa pas encore Ă©tĂ© accĂ©dĂ©e gĂ©nĂšre une exceptionAttributeError
.En plus dâoffrir des avantages potentiels en terme de performance,
@cached_property
peut garantir que la valeur dâun attribut ne change pas de maniĂšre inattendue au cours de la vie dâune instance. Cela pourrait se produire avec une mĂ©thode dont le calcul est basĂ© surdatetime.now()
, ou dans le cas oĂč la base de donnĂ©es est modifiĂ©e par une autre processus dans le bref intervalle entre des appels successifs dâune mĂ©thode de la mĂȘme instance.Vous pouvez crĂ©er des propriĂ©tĂ©s en cache pour des mĂ©thodes. Par exemple, si vous avez une mĂ©thode coĂ»teuse
get_friends()
et que vous vouliez permettre de lâappeler aussi sans rĂ©cupĂ©rer la valeur en cache, vous pourriez Ă©crire :friends = cached_property(get_friends)
Alors que
person.get_friends()
recalcule les amis à chaque appel, la valeur de la propriété en cache persiste tant que vous ne la supprimez pas, comme expliqué ci-dessus :x = person.friends # calls first time y = person.get_friends() # calls again z = person.friends # does not call x is z # is True
ObsolĂšte depuis la version 4.1: Le paramĂštre
name
est obsolĂšte et sera supprimĂ© dans Django 5.0 car il nâest plus nĂ©cessaire Ă partir de Python 3.6.
-
class
classproperty
(method=None)[source]¶ Semblable Ă
@classmethod
, le décorateur@classproperty
convertit le rĂ©sultat dâune mĂ©thode ayant un unique paramĂštrecls
en une propriété à laquelle on peut directement accéder depuis la classe.
-
keep_lazy
(func, *resultclasses)[source]¶ Django offre de nombreuses fonctions utilitaires (particuliÚrement dans
django.utils
) qui acceptent une chaĂźne comme premier paramĂštre et font quelque chose avec cette chaĂźne. Ces fonctions sont utilisĂ©es aussi bien par des filtres de gabarit que de façon directe dans du code Python.Si vous Ă©crivez vous-mĂȘme des fonctions semblables et que vous devez gĂ©rer des traductions, vous serez confrontĂ© au problĂšme du traitement du premier paramĂštre quand il sâagit dâun objet de traduction diffĂ©rĂ©e. Il nâest pas souhaitable de le convertir immĂ©diatement en chaĂźne de caractĂšres, car il se peut que cette fonction soit utilisĂ©e en dehors dâune vue (et donc que le rĂ©glage de langue du fil dâexĂ©cution en cours ne soit pas le bon).
Pour des cas comme celui-là , utilisez le décorateur
django.utils.functional.keep_lazy()
. Il modifie la fonction afin que si elle est appelĂ©e avec en paramĂštre une traduction diffĂ©rĂ©e, lâĂ©valuation de la fonction est reportĂ©e jusquâau moment oĂč il devient vraiment nĂ©cessaire de produire une chaĂźne.Par exemple :
from django.utils.functional import keep_lazy, keep_lazy_text def fancy_utility_function(s, *args, **kwargs): # 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, *args, **kwargs): ...
Le décorateur
keep_lazy()
accepte quelques paramÚtres supplémentaires (*args
) indiquant le ou les types renvoyĂ©s par la fonction originale. Un cas dâutilisation frĂ©quent est dâavoir des fonctions qui renvoient du texte. Pour celles-ci, passez le typestr
Ăkeep_lazy
(ou utilisez le décorateurkeep_lazy_text()
prĂ©sentĂ© Ă la section suivante).Lâemploi de ce dĂ©corateur permet dâĂ©crire une fonction et de compter sur la prĂ©sence dâune vraie chaĂźne en entrĂ©e, puis dâajouter au final la prise en charge des objets de traduction diffĂ©rĂ©e.
-
keep_lazy_text
(func)[source]¶ Un raccourci pour
keep_lazy(str)(func)
.Si vous avez une fonction qui renvoie du texte et que vous souhaitez pouvoir accepter des paramĂštres dont lâĂ©valuation est diffĂ©rĂ©e, utilisez ce dĂ©corateur :
from django.utils.functional import keep_lazy, keep_lazy_text # Our previous example was: @keep_lazy(str) def fancy_utility_function(s, *args, **kwargs): ... # Which can be rewritten as: @keep_lazy_text def fancy_utility_function(s, *args, **kwargs): ...
django.utils.html
¶
En principe, le code HTML doit ĂȘtre construit avec des gabarits Django pour profiter de leur mĂ©canisme dâĂ©chappement automatique, en faisant appel aux utilitaires de django.utils.safestring
en cas de besoin. Ce module fournit quelques utilitaires supplĂ©mentaires de bas niveau pour lâĂ©chappement de code HTML.
-
escape
(text)¶ Renvoie le texte donnĂ© en codant les esperluettes, les guillemets et les chevrons de maniĂšre adaptĂ©e au HTML. Le texte en entrĂ©e est dâabord forcĂ© en chaĂźne de caractĂšres et le rĂ©sultat final est marquĂ© comme sĂ»r avec
mark_safe()
.
-
conditional_escape
(text)¶ Semblable Ă
escape()
, sauf quâelle nâopĂšre pas sur les chaĂźnes dĂ©jĂ Ă©chappĂ©es afin dâĂ©viter un double Ă©chappement.
-
format_html
(format_string, *args, **kwargs)¶ Cette fonction est semblable Ă
str.format()
, sauf quâelle est destinĂ©e Ă construire des fragments de HTML. Le premier argumentformat_string
nâest pas Ă©chappĂ©, mais tous les autres arguments, nommĂ©s ou pas, sont traitĂ©s parconditional_escape()
avant dâĂȘtre transmis Ăstr.format()
. Finalement, la chaßne résultante est marquée comme sûre avecmark_safe()
.Dans les cas oĂč il sâagit de produire des petits fragments HTML, cette fonction doit ĂȘtre prĂ©fĂ©rĂ©e Ă lâinterpolation de chaĂźne directe avec
%
oustr.format()
, car elle applique lâĂ©chappement Ă tous ses paramĂštres, tout comme le fait le systĂšme de gabarit par dĂ©faut.Donc au lieu dâĂ©crire :
mark_safe( "%s <b>%s</b> %s" % ( some_html, escape(some_text), escape(some_other_text), ) )
Il est prĂ©fĂ©rable dâĂ©crire :
format_html( "{} <b>{}</b> {}", mark_safe(some_html), some_text, some_other_text, )
Ceci prĂ©sente lâavantage de ne pas devoir appliquer soi-mĂȘme
escape()
à chacun des paramÚtres et de risquer une anomalie ou une vulnérabilité XSS si on en oublie un.Notez que bien que cette fonction utilise
str.format()
pour effectuer lâinterpolation, certaines des options de format fournies parstr.format()
(par ex. les formats de nombre) ne fonctionnent pas, car tous les paramÚtres sont passés par la moulinetteconditional_escape()
qui appelleforce_str()
sur les valeurs reçues.
-
format_html_join
(sep, format_string, args_generator)¶ Une adaptateur de
format_html()
conçu pour le cas courant dâun groupe de paramĂštres devant ĂȘtre mis en forme avec la mĂȘme chaĂźne de format, puis combinĂ©s avecsep
.sep
passe lui-mĂȘme aussi parconditional_escape()
.args_generator
doit ĂȘtre un itĂ©rateur renvoyant la liste de paramĂštresargs
qui seront transmis Ăformat_html()
. Par exemple :format_html_join("\n", "<li>{} {}</li>", ((u.first_name, u.last_name) for u in users))
-
json_script
(value, element_id=None, encoder=None)¶ Ăchappe tous les caractĂšres spĂ©ciaux HTML/XML avec leur sĂ©quence dâĂ©chappement Unicode, afin que leur valeur puisse ĂȘtre utilisĂ©e de maniĂšre sĂ©curisĂ©e avec JavaScript. Elle enveloppe Ă©galement le JSON Ă©chappĂ© dans une balise
<script>
. Si le paramĂštreelement_id
ne vaut pasNone
, la balise<script>
reçoit comme paramÚtreid
cette valeur. Par exemple :>>> json_script({"hello": "world"}, element_id="hello-data") '<script id="hello-data" type="application/json">{"hello": "world"}</script>'
Le codeur
encoder
qui contient par défautdjango.core.serializers.json.DjangoJSONEncoder
est utilisĂ© pour sĂ©rialiser les donnĂ©es. Voir sĂ©rialisation JSON pour plus de dĂ©tails sur ce sĂ©rialiseur.Changed in Django 4.1:Dans les anciennes versions, lâargument
element_id
Ă©tait obligatoire.Changed in Django 4.2:Lâargument
encoder
a été ajouté.
-
strip_tags
(value)¶ Tente de supprimer de la chaĂźne tout ce qui ressemble Ă une balise HTML, câest-Ă -dire tout ce qui est contenu Ă lâintĂ©rieur de
<>
.Il nây a absolument AUCUNE garantie que la chaĂźne rĂ©sultante sera vraiment sĂ»re du point de vue HTML. Il ne faut donc JAMAIS marquer comme sĂ»re le rĂ©sultat dâun appel Ă
strip_tag
sans lâavoir dâabord Ă©chappĂ©, par exemple avecescape()
.Par exemple :
strip_tags(value)
Si
value
vaut"<b>Joël</b> <button>est</button> une <span>limace</span>"
, la valeur renvoyée sera"Joël est une limace"
.Si vous recherchez une solution plus solide, recherchez un outil tiers de nettoyage de HTML.
-
html_safe
()¶ La méthode
__html__()
dâune classe aide les gabarits non Django Ă dĂ©tecter les classes dont le rĂ©sultat ne demande pas dâĂ©chappement HTML.Ce dĂ©corateur dĂ©finit la mĂ©thode
__html__()
pour la classe décorée en enveloppant__str__()
dansmark_safe()
. Assurez-vous que la méthode__str__()
renvoie effectivement du texte qui ne demande pas dâĂ©chappement HTML.
django.utils.http
¶
-
urlencode
(query, doseq=False)[source]¶ Une version de la fonction Python
urllib.parse.urlencode()
pouvant agir sur des dictionnairesMultiValueDict
et dâautres valeurs qui ne sont pas des chaĂźnes.
-
http_date
(epoch_seconds=None)[source]¶ Met en forme la date/heure en respectant le format de date RFC 1123#section-5.2.14 tel que défini par la RFC 9110#section-5.6.7 du standard HTTP.
Accepte un nombre à virgule exprimé en secondes depuis le temps Unix initial en UTC, de maniÚre semblable à ce que produit
time.time()
. Si le paramĂštre estNone
, câest la date actuelle qui est renvoyĂ©e.Produit une chaĂźne au format
Wdy, DD Mon YYYY HH:MM:SS GMT
.
-
content_disposition_header
(as_attachment, filename)[source]¶ - New in Django 4.2.
Construit la valeur dâun en-tĂȘte HTTP
Content-Disposition
Ă partir du nom de fichierfilename
donné tel que spécifié par rfc:6266. RenvoieNone
sias_attachment
vautFalse
et quefilename
vautNone
, sinon renvoie une chaĂźne apte Ă ĂȘtre utilisĂ©e dans lâen-tĂȘte HTTPContent-Disposition
.
django.utils.module_loading
¶
Fonctions pour manipuler les modules Python.
-
import_string
(dotted_path)[source]¶ Importe un chemin pointĂ© de module et renvoie la classe ou lâattribut dĂ©signĂ© par le dernier nom du chemin. GĂ©nĂšre
ImportError
si lâimportation Ă©choue. Par exemple :from django.utils.module_loading import import_string ValidationError = import_string("django.core.exceptions.ValidationError")
est équivalent à :
from django.core.exceptions import ValidationError
django.utils.safestring
¶
Fonctions et classes pour travailler avec des « chaĂźnes sĂ»res » : des chaĂźnes qui peuvent ĂȘtre affichĂ©es sans crainte sans devoir subir dâĂ©chappement HTML. Quand une chaĂźne est marquĂ©e comme « sĂ»re » (safe), cela signifie que le producteur de la chaĂźne a dĂ©jĂ transformĂ© en entitĂ©s appropriĂ©es les caractĂšres qui ne doivent pas ĂȘtre interprĂ©tĂ©s par le moteur HTML (par ex. « < »).
-
class
SafeString
[source]¶ Une sous-classe de
str
pour des chaĂźnes ayant Ă©tĂ© explicitement marquĂ©es comme « sĂ»res » (plus besoin dâĂ©chappement) Ă des fins dâaffichage HTML.
-
mark_safe
(s)[source]¶ Marque explicitement une chaĂźne comme sĂ»re en vue de son affichage (HTML). Lâobjet renvoyĂ© peut ĂȘtre utilisĂ© partout oĂč une chaĂźne peut ĂȘtre utilisĂ©.
Cette fonction peut ĂȘtre utilisĂ©e plusieurs fois sur la mĂȘme chaĂźne.
Peut aussi ĂȘtre utilisĂ© comme dĂ©corateur.
Pour la construction de fragments de HTML, il est gĂ©nĂ©ralement prĂ©fĂ©rable dâutiliser plutĂŽt
django.utils.html.format_html()
.Une chaßne marquée comme sûre redevient non sûre quand elle est modifiée. Par exemple :
>>> 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)¶ Une version de
str.format()
pour les cas oĂčformat_string
,args
oukwargs
contiennent des objets différés. Le premier paramÚtre est la chaßne à mettre en forme. Par exemple :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(), ), ]
Cet exemple permet aux traducteurs de traduire une partie de lâURL. Si « person » est traduit en « persona », lâexpression rĂ©guliĂšre va correspondre Ă
persona/(?P<pk>\d+)/$
, par ex.persona/5/
.
-
slugify
(value, allow_unicode=False)¶ Convertit une chaĂźne en un « slug » dâURL en :
- Convertissant en ASCII si
allow_unicode
vautFalse
(par défaut). - Convertissant en minuscules.
- Supprimant les caractÚres qui ne sont pas alphanumériques, des soulignements, des tirets ou des espaces blancs.
- Remplaçant tout espace blanc ou répétition de tirets par un seul.
- Supprimant les caractÚres blancs, les tirets et les soulignements en début et fin de chaßne.
Par exemple :
>>> slugify(" Joel is a slug ") 'joel-is-a-slug'
Si vous souhaitez permettre les caractĂšres Unicode, passez
allow_unicode=True
. Par exemple :>>> slugify("äœ ć„œ World", allow_unicode=True) 'äœ ć„œ-world'
- Convertissant en ASCII si
django.utils.timezone
¶
-
utc
¶ Instance
tzinfo
qui représente le temps UTC.ObsolÚte depuis la version 4.1: Ceci est un alias de
datetime.timezone.utc
. Utilisez directementdatetime.timezone.utc
-
get_fixed_timezone
(offset)¶ Renvoie une instance
tzinfo
représentant un fuseau horaire avec un décalage UTC fixe.offset
est une différence de tempsdatetime.timedelta
ou un nombre entier en minutes. Utilisez des valeurs positives pour les fuseaux horaires Ă lâest dâUTC et des valeurs nĂ©gatives Ă lâouest dâUTC.
-
get_default_timezone
()¶ Renvoie une instance
tzinfo
qui représente le fuseau horaire par défaut.
-
get_default_timezone_name
()¶ Renvoie le nom du fuseau horaire par défaut.
-
get_current_timezone
()¶ Renvoie une instance
tzinfo
qui représente le fuseau horaire en cours.
-
get_current_timezone_name
()¶ Renvoie le nom du fuseau horaire en cours.
-
activate
(timezone)¶ Définit le fuseau horaire actif. Le paramÚtre
timezone
doit ĂȘtre une instance dâune sous-classe detzinfo
ou un nom de fuseau horaire.
-
deactivate
()¶ Désactive le fuseau horaire actuel.
-
override
(timezone)¶ Gestionnaire de contexte Python qui dĂ©finit le fuseau horaire actif lorsquâil entre en action avec
activate()
, puis restaure le fuseau horaire précédemment actif en quittant. Si le paramÚtretimezone
vautNone
, le fuseau horaire actif est alors dĂ©sactivĂ© Ă lâentrĂ©e du gestionnaire avecdeactivate()
.override
est aussi utilisable comme décorateur de fonction.
-
localtime
(value=None, timezone=None)¶ Convertit un objet
datetime
conscient vers un fuseau horaire différent, par défaut le fuseau horaire actif.Lorsque
value
est omise, la valeur par défaut estnow()
.Cette fonction ne fonctionne pas avec des objets date/heure naĂŻfs ; utilisez alors plutĂŽt
make_aware()
.
-
localdate
(value=None, timezone=None)¶ Utilise
localtime()
pour convertir un objetdatetime
conscient en unedate()
dans un fuseau horaire différent, par défaut le fuseau horaire actif.Lorsque
value
est omise, la valeur par défaut estnow()
.Cette fonction ne fonctionne pas avec des objets date/heure naĂŻfs.
-
now
()¶ Renvoie un objet
datetime
représentant le moment actuel dans le temps (« maintenant »). La valeur précisément renvoyée dépend de la valeur deUSE_TZ
:- Si
USE_TZ
estFalse
, il sâagira dâune date/heure naĂŻve (câest-Ă -dire une date/heure sans fuseau horaire associĂ©) reprĂ©sentant le temps actuel dans le fuseau horaire local du systĂšme. - Si
USE_TZ
estTrue
, il sâagira dâune date/heure consciente reprĂ©sentant le temps actuel en UTC. Notez quenow()
renvoie toujours le temps UTC quelle que soit la valeur deTIME_ZONE
; vous pouvez utiliserlocaltime()
pour obtenir lâheure dans le fuseau horaire actif.
- Si
-
is_aware
(value)¶ Renvoie
True
sivalue
est consciente,False
si elle est naïve. Cette fonction présuppose quevalue
est un objetdatetime
.
-
is_naive
(value)¶ Renvoie
True
sivalue
est naĂŻve,False
si elle est consciente. Cette fonction présuppose quevalue
est un objetdatetime
.
-
make_aware
(value, timezone=None, is_dst=None)¶ Renvoie un objet
datetime
conscient reprĂ©sentant le mĂȘme moment dans le temps quevalue
dans le fuseautimezone
,value
étant un objetdatetime
naĂŻf. Sitimezone
est dĂ©fini ĂNone
, il prend le fuseau horaire actuel comme valeur par défaut.ObsolÚte depuis la version 4.0: Quand on utilise
pytz
, lâexceptionpytz.AmbiguousTimeError
est gĂ©nĂ©rĂ©e lorsquâon essaie de rendrevalue
consciente pendant une transition dâheure dâĂ©tĂ©/hiver et quand la mĂȘme heure survient deux fois (passage heure dâĂ©tĂ© Ă hiver). En dĂ©finissantis_dst
ĂTrue
ouFalse
, lâexception est Ă©vitĂ©e en choisissant si lâheure est celle qui prĂ©cĂšde ou celle qui suit la transition, respectivement.Quand on utilise
pytz
, lâexceptionpytz.NonExistentTimeError
est générée quand on essaie de rendrevalue
consciente pendant une transition dâheure dâĂ©tĂ©/hiver et quand lâheure concernĂ©e ne survient jamais. Par exemple, si lâheure 2:00 nâexiste pas dans une transition, rendre 2:30 consciente dans ce fuseau horaire produira une exception. Pour Ă©viter cela, vous pouvez utiliseris_dst
pour indiquer commentmake_aware()
doit interprĂ©ter une telle heure qui nâexiste pas. Siis_dst=True
, lâheure ci-dessus sera interprĂ©tĂ©e comme 2:30 du temps de transition (Ă©quivalent Ă 1:30 en heure locale). Inversement, siis_dst=False
, lâheure sera interprĂ©tĂ©e comme 2:30 du temps standard (Ă©quivalent Ă 3:30 en heure locale).Le paramĂštre
is_dst
nâa aucun effet lorsquâon utilise des implĂ©mentations de fuseaux horaires autres quepytz
.Le paramĂštre
is_dst
est obsolÚte et sera supprimé dans Django 5.0.
-
make_naive
(value, timezone=None)¶ Renvoie un objet
datetime
naĂŻf reprĂ©sentant le mĂȘme moment dans le temps quevalue
dans le fuseautimezone
,value
étant un objetdatetime
conscient. Sitimezone
est dĂ©fini ĂNone
, il prend le fuseau horaire actuel comme valeur par défaut.
django.utils.translation
¶
Pour une discussion complĂšte sur lâutilisation de ce qui suit, consultez la documentation sur la traduction.
-
gettext
(message)¶ Traduit
message
et renvoie le résultat dans une chaßne.
-
pgettext
(context, message)¶ Traduit
message
seloncontext
et renvoie le rĂ©sultat dans une chaĂźne.Pour plus dâinformations, voir Contextual markers.
-
gettext_lazy
(message)¶
-
pgettext_lazy
(context, message)¶ MĂȘme comportement que les versions non diffĂ©rĂ©es ci-dessus, mais en utilisant une exĂ©cution diffĂ©rĂ©e.
-
gettext_noop
(message)¶ Marque les chaĂźnes en vue de leur traduction mais ne les traduit pas sur le moment. Cela peut ĂȘtre utile pour stocker des chaĂźnes qui doivent rester dans la langue de base (parce quâelles pourraient ĂȘtre utilisĂ©es de maniĂšre externe) dans des variables globales et que ces chaĂźnes seront traduites plus tard.
-
ngettext
(singular, plural, number)¶ Traduit
singular
etplural
et renvoie la chaßne appropriée en fonction denumber
.
-
npgettext
(context, singular, plural, number)¶ Traduit
singulier
etpluriel
et renvoie la chaßne appropriée en fonction denombre
et decontext
.
-
ngettext_lazy
(singular, plural, number)¶
-
npgettext_lazy
(context, singular, plural, number)¶ MĂȘme comportement que les versions non diffĂ©rĂ©es ci-dessus, mais en utilisant une exĂ©cution diffĂ©rĂ©e.
-
activate
(language)¶ RĂ©cupĂšre le catalogue de traduction dâune langue donnĂ©e et lâactive comme catalogue de traduction courant pour le fil dâexĂ©cution en cours.
-
deactivate
()¶ Désactive le catalogue de traduction actif afin que des appels à _ subséquents vont refaire appel au catalogue de traduction par défaut.
-
deactivate_all
()¶ Place une instance de
NullTranslations()
comme catalogue de traduction actif. Cela peut ĂȘtre utile si lâon souhaite que des traductions diffĂ©rĂ©es apparaissent avec leur chaĂźne originale (donc non traduite) pour une raison quelconque.
-
override
(language, deactivate=False)¶ Un gestionnaire de contexte Python qui utilise
django.utils.translation.activate()
pour rĂ©cupĂ©rer le catalogue de traduction dâune langue donnĂ©es, qui lâactive comme catalogue de traduction pour le fil dâexĂ©cution en cours et qui rĂ©active la langue prĂ©cĂ©demment active lors de sa sortie. Il est possible de dĂ©finir le paramĂštredeactivate
ĂTrue
si lâon souhaite que la langue de traduction temporaire soit dĂ©sactivĂ©e Ă la sortie du gestionnaire avecdjango.utils.translation.deactivate()
. Si le paramĂštrelanguage
vautNone
, une instance deNullTranslations()
est activée dans le code affecté par le gestionnaire de contexte.override
est aussi utilisable comme décorateur de fonction.
-
check_for_language
(lang_code)¶ ContrĂŽle sâil existe un fichier de langue global pour le code de langue donnĂ© (par ex. âfrâ, âpt_BRâ). Ceci est utilisĂ© pour dĂ©cider si une langue demandĂ©e par un utilisateur est disponible.
-
get_language
()¶ Renvoie le code de langue actuellement sélectionné. Renvoie
None
si les traductions sont temporairement désactivées (pardeactivate_all()
ou lorsqueNone
est passĂ© Ăoverride()
).
-
get_language_bidi
()¶ Renvoie lâagencement bidirectionnel de la langue sĂ©lectionnĂ©e :
False
= agencement de gauche Ă droiteTrue
= agencement de droite Ă gauche
-
get_language_from_request
(request, check_path=False)¶ Analyse la requĂȘte pour trouver quelle est la langue souhaitĂ©e par lâutilisateur. Seules les langues figurant dans
settings.LANGUAGES
sont prises en compte. Si lâutilisateur demande un sous-code de langue alors que seule la langue principale est disponible, câest la langue principale qui est renvoyĂ©e.Si
check_path
vautTrue
, la fonction examine dâabord lâURL demandĂ©e pour voir si son chemin commence par un code de langue figurant dans le rĂ©glageLANGUAGES
.
-
get_supported_language_variant
(lang_code, strict=False)¶ Renvoie
lang_code
sâil figure dans le rĂ©glageLANGUAGES
, en choisissant potentiellement une variante plus gĂ©nĂ©rique. Par exemple, âesâ` est renvoyĂ© silang_code
est'es-ar'
et que'es'
se trouve dansLANGUAGES
mais pas'es-ar'
.Si
strict
vautFalse
(valeur par dĂ©faut), une variante territoriale peut ĂȘtre renvoyĂ©e lorsque ni le code de langue, ni sa variante gĂ©nĂ©rique nâest trouvĂ©e. Par exemple, si seul'es-co'
se trouve dansLANGUAGES
, câest ce dernier qui est renvoyĂ© pour les codes de langue comme'es'
et'es-ar'
. Ces correspondances ne sont pas renvoyées quandstrict=True
.GénÚre
LookupError
si rien nâest trouvĂ©.
-
to_locale
(language)¶ Transforme un nom de langue (en-us) en un nom de locale (en_US).
-
templatize
(src)¶ Transforme un gabarit Django en un contenu analysable par
xgettext
. Ce processus traduit les balises de traduction de Django en invocations de fonctionsgettext
standard.