Bij Django-ontwikkeling is het omgaan met strings dagelijkse kost. Het is nodig om gebruikersinvoer op te schonen, URL's te genereren en teksten samen te vatten. django.utils.text is een module die krachtige en handige hulpfuncties voor deze alledaagse tekstverwerkingen verzamelt.🧰
In deze post bekijken we de meest nuttige en vaak gebruikte functies van de django.utils.text module.
1. De perfecte converter voor URL's: slugify
Dit is misschien wel de bekendste functie, en het zou niet overdreven zijn om te zeggen dat dit de reden van bestaan van deze module is. Slug verwijst naar een vereenvoudigde versie van een titel of string die meestal wordt gebruikt als onderdeel van een URL.
slugify transformeert strings als volgt:
- Verandert in kleine letters.
- Vervangt speciale tekens (inclusief spaties) door een koppelteken (
-). - Verwijdert alle tekens die geen letters, cijfers, koppeltekens of onderstrepingen (_) zijn.
Voorbeeld:
from django.utils.text import slugify
title = "Django 5.0 Release! Wat is nieuw?"
slug = slugify(title)
print(slug)
# Resultaat: 'django-50-release-wat-is-nieuw'
# Dit kan nu worden gebruikt in de URL zoals /blog/django-50-release-wat-is-nieuw/.
<Belangrijk> Ondersteuning voor CJK-talen (Chinees, Japans, Koreaans) en Unicode: Standaard laat
slugifyalleen ASCII-tekens over. Om Unicode-tekens van CJK-talen in de slug op te nemen, moet je de optieallow_unicode=Truegebruiken.
title_ko = "Django-hulpmiddelen overvloedig"
# Standaard (Koreaans verdwijnt)
print(slugify(title_ko))
# Resultaat: '' (lege string)
# Unicode toestaan
print(slugify(title_ko, allow_unicode=True))
# Resultaat: '장고-유틸리티-총정리'
2. Veilige bestandsnaam genereren: get_valid_filename
Het rechtstreeks opslaan van de naam van een door de gebruiker geüpload bestand op de server is zeer riskant. De bestandsnaam kan gevaarlijke tekens bevatten zoals ../ (padverkenning), of speciale tekens die niet geldig zijn in Windows (:, *, ?).
get_valid_filename zorgt ervoor dat zulke gevaarlijke tekens of gereserveerde systeemwoorden worden vervangen door veilige tekens (voornamelijk een onderstreping _), zodat er alleen geldige bestandsnamen worden geretourneerd.
Voorbeeld:
from django.utils.text import get_valid_filename
# Door de gebruiker kwaadaardig geüpload bestandsnaam
user_filename = "../../secrets/pa$$word.txt"
safe_name = get_valid_filename(user_filename)
print(safe_name)
# Resultaat: '.._.._secrets_pa__word.txt'
# Gereserveerde systeemtekens
windows_filename = "CON:MyFile.pdf"
safe_name_2 = get_valid_filename(windows_filename)
print(safe_name_2)
# Resultaat: '_CON_MyFile.pdf'
3. Maak een nette samenvatting: truncatechars / truncatewords
Dit is een functie die vaak wordt gebruikt om lange teksten op een blogoverzichtspagina kort weer te geven. Het staat ook bekend als een Django-sjabloonfilter (|truncatechars:50), maar deze functies kunnen ook direct op Python-code-niveau worden gebruikt.
truncatechars(text, length): Snijdt de tekst op basis van het aantallengthtekens (inclusief spaties), en als het is ingekort, voegt het...(standaard) toe aan het einde.truncatewords(text, num): Snijdt de tekst op basis van het aantal woordennum, en als het is ingekort, voegt het...toe aan het einde.
Voorbeeld:
from django.utils.text import truncatechars, truncatewords
long_text = "Django is a high-level Python web framework that encourages rapid development."
# 1. Op basis van het aantal tekens (20 tekens)
summary_chars = truncatechars(long_text, 20)
print(summary_chars)
# Resultaat: 'Django is a high-le...'
# 2. Op basis van het aantal woorden (5 woorden)
summary_words = truncatewords(long_text, 5)
print(summary_words)
# Resultaat: 'Django is a high-level Python...'
4. Maak de eerste letter hoofdletter: capfirst
Een eenvoudige, maar vaak gebruikte utility. Dit verandert alleen de eerste letter van de string in een hoofdletter. Het is nuttig voor kleine opmaakveranderingen zoals het weergeven van verbose_name van een model in een sjabloon.
Voorbeeld:
from django.utils.text import capfirst
label = "gebruikersnaam"
formatted_label = capfirst(label)
print(formatted_label)
# Resultaat: 'Gebruikersnaam'
5. Natuurlijke lijstconversie: get_text_list
Dit converteert een Python-lijst (list) naar een leesbare, natuurlijk taalzin. Het voegt "en" (of een andere verbinding) aan de laatste item toe.
Voorbeeld:
from django.utils.text import get_text_list
# Wanneer er meerdere items zijn (standaard: 'en')
items_1 = ['Appel', 'Banaan', 'Kers']
print(get_text_list(items_1))
# Resultaat: 'Appel, Banaan en Kers'
# Verbinding wijzigen (bijv.: 'of')
items_2 = ['E-mail', 'SMS']
print(get_text_list(items_2, 'of'))
# Resultaat: 'E-mail of SMS'
# Wanneer er maar één item is
items_3 = ['Django']
print(get_text_list(items_3))
# Resultaat: 'Django'
Samenvatting
De django.utils.text module lost vrijwel alle 'fijnere' handelingen op die nodig zijn voor het omgaan met tekst in Django-ontwikkeling. Door deze module goed te gebruiken, kan de code netter worden, en worden potentiële beveiligingsproblemen bij het omgaan met URL's of bestandsnamen voorkomen.
Met name slugify en get_valid_filename zijn onmisbare hulpprogramma's in een Django-project.
댓글이 없습니다.