Bei der Entwicklung mit Django ist das Arbeiten mit Zeichenfolgen eine alltägliche Aufgabe. Es ist notwendig, Benutzereingaben zu bereinigen, URLs zu erstellen und Texte zusammenzufassen. django.utils.text ist ein Modul, das eine Vielzahl von leistungsstarken und praktischen Utility-Funktionen für diese alltäglichen Textverarbeitungen bereitstellt. 🧰
In diesem Beitrag werden wir die nützlichsten und am häufigsten verwendeten Kernfunktionen des Moduls django.utils.text ansehen.
1. Perfekter Umwandler für URLs: slugify
Es ist nicht übertrieben, zu sagen, dass dies die bekannteste Funktion des Moduls ist. Slug bezeichnet das vereinfachte Format eines Titels oder einer Zeichenfolge, das hauptsächlich als Bestandteil einer URL verwendet wird.
slugify wandelt Zeichenfolgen wie folgt um:
- Ändert sie in Kleinbuchstaben.
- Ersetzt Sonderzeichen (einschließlich Leerzeichen) durch einen Bindestrich (
-). - Entfernt alle Zeichen, die keine Buchstaben, Zahlen, Bindestriche oder Unterstriche (_) sind.
Beispiel:
from django.utils.text import slugify
title = "Django 5.0 Release! Was gibt's Neues?"
slug = slugify(title)
print(slug)
# Ergebnis: 'django-50-release-was-gibts-neues'
# Jetzt kann dieser Wert in einer URL wie /blog/django-50-release-was-gibts-neues/ verwendet werden.
<Wichtig> Unterstützung für CJK-Sprachen (Chinesisch, Japanisch, Koreanisch) und Unicode: Standardmäßig behält
slugifynur ASCII-Zeichen. Um Unicode-Zeichen von CJK-Sprachen in den Slug einzuschließen, muss die Optionallow_unicode=Trueunbedingt verwendet werden.
title_ko = "Django Utilities Zusammenfassung"
# Standard (Koreanisch verschwindet)
print(slugify(title_ko))
# Ergebnis: '' (leere Zeichenfolge)
# Unicode zulassen
print(slugify(title_ko, allow_unicode=True))
# Ergebnis: '장고-유틸리티-총정리'
2. Sicheres Erstellen von Dateinamen: get_valid_filename
Es ist sehr gefährlich, Dateinamen von Benutzern direkt auf dem Server zu speichern. Dateinamen könnten Zeichen wie ../ (Verzeichnissuche) oder spezielle Zeichen, die unter Windows nicht zulässig sind (:, *, ?), enthalten.
get_valid_filename stellt sicher, dass solche gefährlichen Zeichen oder systemreservierte Wörter durch sichere Zeichen (hauptsächlich den Unterstrich _) ersetzt werden, sodass nur gültige Dateinamen zurückgegeben werden.
Beispiel:
from django.utils.text import get_valid_filename
# Vom Benutzer böswillig hochgeladener Dateiname
user_filename = "../../geheimnisse/pa$$word.txt"
safe_name = get_valid_filename(user_filename)
print(safe_name)
# Ergebnis: '.._.._geheimnisse_pa__word.txt'
# Systemreservierte Zeichen
windows_filename = "CON:MyFile.pdf"
safe_name_2 = get_valid_filename(windows_filename)
print(safe_name_2)
# Ergebnis: '_CON_MyFile.pdf'
3. Erstellen einer prägnanten Zusammenfassung: truncatechars / truncatewords
Diese Funktion wird häufig verwendet, um in einer Blogübersichtsseite einen langen Text kurz darzustellen. Sie ist auch als Django-Template-Filter (|truncatechars:50) bekannt, kann aber auch auf Python-Code-Ebene direkt verwendet werden.
truncatechars(text, length): Schneidet nach einer Anzahl vonlengthZeichen (einschließlich Leerzeichen) und fügt, falls abgeschnitten, am Ende...(Standard) hinzu.truncatewords(text, num): Schneidet auf Basis einer Anzahl vonnumWörtern und fügt, falls abgeschnitten,...hinzu.
Beispiel:
from django.utils.text import truncatechars, truncatewords
long_text = "Django ist ein hochentwickeltes Python-Webframework, das eine schnelle Entwicklung fördert."
# 1. Basierend auf der Anzahl der Zeichen (20 Zeichen)
summary_chars = truncatechars(long_text, 20)
print(summary_chars)
# Ergebnis: 'Django ist ein hoch...'
# 2. Basierend auf der Anzahl der Wörter (5 Wörter)
summary_words = truncatewords(long_text, 5)
print(summary_words)
# Ergebnis: 'Django ist ein hochentwickeltes Python...'
4. Nur den ersten Buchstaben groß: capfirst
Ein einfaches, aber überraschend häufig verwendetes Utility. Es macht nur den ersten Buchstaben einer Zeichenfolge groß. Nützlich für kleine Formatierungen, wie beim Anzeigen von verbose_name eines Modells in einem Template.
Beispiel:
from django.utils.text import capfirst
label = "benutzername"
formatted_label = capfirst(label)
print(formatted_label)
# Ergebnis: 'Benutzername'
5. Natürliche Listenumwandlung: get_text_list
Es wandelt eine Python-Liste (list) in einen leicht lesbaren Satz um. Vor dem letzten Element wird „und“ (oder ein anderes Konjunktion) hinzugefügt.
Beispiel:
from django.utils.text import get_text_list
# Bei mehreren Elementen (Standard: 'und')
items_1 = ['Apfel', 'Banane', 'Kirsche']
print(get_text_list(items_1))
# Ergebnis: 'Apfel, Banane und Kirsche'
# Konjunktion ändern (z. B. 'oder')
items_2 = ['E-Mail', 'SMS']
print(get_text_list(items_2, 'oder'))
# Ergebnis: 'E-Mail oder SMS'
# Bei nur einem Element
items_3 = ['Django']
print(get_text_list(items_3))
# Ergebnis: 'Django'
Zusammenfassung
Das Modul django.utils.text löst nahezu alle „Feinheiten“, die beim Umgang mit Text in der Django-Entwicklung erforderlich sind. Durch die geschickte Nutzung dieses Moduls kann Ihr Code sauberer werden und potenzielle Sicherheitsprobleme bei der Verarbeitung von URLs oder Dateinamen vermieden werden.
Insbesondere slugify und get_valid_filename können als unverzichtbare Utilities in einem Django-Projekt betrachtet werden.
Es sind keine Kommentare vorhanden.