Lors du développement avec Django, manipuler des chaînes de caractères est aussi courant que de manger. Il est nécessaire de nettoyer les entrées utilisateur, de générer des URL et de résumer du texte. django.utils.text est un module qui regroupe des fonctions utilitaires puissantes et pratiques pour ces tâches de traitement de texte quotidiennes.🧰
Dans ce post, nous allons explorer les principales fonctionnalités de django.utils.text qui sont les plus utiles et fréquemment utilisées.
1. Le convertisseur parfait pour les URL : slugify
C'est sans doute la fonction la plus célèbre de ce module, presque sa raison d'être. Un slug est une version simplifiée d'un titre ou d'une chaîne de caractères, généralement utilisée comme partie d'une URL.
slugify transforme une chaîne comme suit :
- Convertit en minuscules.
- Remplace les caractères spéciaux (y compris les espaces) par un tiret (
-). - Supprime les caractères autres que les lettres, chiffres, tirets et underscores (_).
Exemple :
from django.utils.text import slugify
title = "Django 5.0 Release! What's new?"
slug = slugify(title)
print(slug)
# Résultat : 'django-50-release-whats-new'
# Vous pouvez maintenant utiliser cette valeur dans une URL comme /blog/django-50-release-whats-new/
<Important> Support des langues CJK (Chinois, Japonais, Coréen) et Unicode : Par défaut,
slugifyne conserve que les caractères ASCII. Pour inclure des caractères Unicode des langues CJK dans le slug, l'optionallow_unicode=Truedoit être utilisée.
title_ko = "장고 유틸리티 총정리"
# Par défaut (le coréen disparait)
print(slugify(title_ko))
# Résultat : '' (chaîne vide)
# Autoriser Unicode
print(slugify(title_ko, allow_unicode=True))
# Résultat : '장고-유틸리티-총정리'
2. Génération de noms de fichiers sûrs : get_valid_filename
Stocker le nom de fichier tel quel lorsqu'un utilisateur télécharge un fichier est très risqué. Il peut contenir des caractères comme ../ (navigation des chemins) ou des caractères spéciaux non autorisés sur Windows (:, *, ?).
get_valid_filename garantit que seuls des caractères sûrs (principalement des underscores _) sont renvoyés, en remplaçant les caractères dangereux ou les mots réservés du système.
Exemple :
from django.utils.text import get_valid_filename
# Nom de fichier téléchargé par un utilisateur malveillant
user_filename = "../../secrets/pa$$word.txt"
safe_name = get_valid_filename(user_filename)
print(safe_name)
# Résultat : '.._.._secrets_pa__word.txt'
# Caractères réservés du système
windows_filename = "CON:MyFile.pdf"
safe_name_2 = get_valid_filename(windows_filename)
print(safe_name_2)
# Résultat : '_CON_MyFile.pdf'
3. Créer des résumés propres : truncatechars / truncatewords
Cette fonctionnalité est souvent utilisée pour prévisualiser de longs textes sur une page de liste de blog. Bien que célèbre grâce au filtre Django (|truncatechars:50), vous pouvez utiliser ces fonctions directement au niveau du code Python.
truncatechars(text, length): Coupez àlengthcaractères (espace compris) et ajoutez...à la fin si le texte est coupé (valeur par défaut).truncatewords(text, num): Coupez ànummots et ajoutez...à la fin si le texte est coupé.
Exemple :
from django.utils.text import truncatechars, truncatewords
long_text = "Django is a high-level Python web framework that encourages rapid development."
# 1. Sur la base du nombre de caractères (20 caractères)
summary_chars = truncatechars(long_text, 20)
print(summary_chars)
# Résultat : 'Django is a high-le...'
# 2. Sur la base du nombre de mots (5 mots)
summary_words = truncatewords(long_text, 5)
print(summary_words)
# Résultat : 'Django is a high-level Python...'
4. Mettre la première lettre en majuscule : capfirst
Une utilité simple mais souvent utilisée. Elle capitalise uniquement la première lettre d'une chaîne. Utile pour des formats plus soignés, par exemple pour afficher le verbose_name d'un modèle dans un template.
Exemple :
from django.utils.text import capfirst
label = "user name"
formatted_label = capfirst(label)
print(formatted_label)
# Résultat : 'User name'
5. Conversion naturelle des listes : get_text_list
Cette fonction transforme une liste Python (list) en une phrase lisible par un humain. Elle ajoute "and" (ou une autre conjonction) avant le dernier élément.
Exemple :
from django.utils.text import get_text_list
# Lorsque plusieurs éléments sont présents (valeur par défaut : 'and')
items_1 = ['Apple', 'Banana', 'Cherry']
print(get_text_list(items_1))
# Résultat : 'Apple, Banana and Cherry'
# Changer la conjonction (par exemple : 'or')
items_2 = ['Email', 'SMS']
print(get_text_list(items_2, 'or'))
# Résultat : 'Email or SMS'
# Lorsqu'il y a un seul élément
items_3 = ['Django']
print(get_text_list(items_3))
# Résultat : 'Django'
Résumé
Le module django.utils.text résout presque tous les 'retouches' nécessaires au traitement du texte lors du développement Django. En l'utilisant bien, vous pouvez rendre votre code plus propre et prévenir des problèmes de sécurité potentiels liés à la gestion des URL ou des noms de fichiers.
En particulier, slugify et get_valid_filename sont des utilitaires indispensables dans un projet Django.
Aucun commentaire.