python / intermediate
Snippet
Django Eigene Management-Befehle
Eigene Management-Befehle erweitern Djangos Verwaltungssystem und ermöglichen die Erstellung wiederverwendbarer Skripte, die über die Kommandozeile mit python manage.py ausgeführt werden können. Sie eignen sich perfekt für automatisierte Aufgaben wie Datenmigration, Bereinigungsoperationen oder geplante Jobs. Die BaseCommand-Klasse bietet Zugriff auf Djangos Umgebung und Datenbank, während die Argumentparsierung flexible, konfigurierbare Skripte erstellt.
snippet.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from django.core.management.base import BaseCommandfrom blog.models import Postfrom django.utils import timezoneclass Command(BaseCommand):help = 'Archives posts older than 30 days'def add_arguments(self, parser):parser.add_argument('--days', type=int, default=30)parser.add_argument('--dry-run', action='store_true')def handle(self, *args, **options):days = options['days']dry_run = options['dry_run']cutoff = timezone.now() - timezone.timedelta(days=days)posts_to_archive = Post.objects.filter(published_at__lt=cutoff,is_archived=False)count = posts_to_archive.count()if dry_run:self.stdout.write(f'Would archive {count} posts')else:posts_to_archive.update(is_archived=True)self.stdout.write(self.style.SUCCESS(f'Archived {count} posts'))
django
Erklärung
1
from django.core.management.base import BaseCommand
Importiere BaseCommand, die Grundlage für alle eigenen Management-Befehle
2
parser.add_argument('--days', type=int, default=30)
Definiere ein benanntes Argument, das einen Integer akzeptiert, Standard ist 30 Tage
3
parser.add_argument('--dry-run', action='store_true')
Füge einen Boolean-Flag hinzu, der standardmäßig False ist wenn nicht angegeben
4
cutoff = timezone.now() - timezone.timedelta(days=days)
Berechne den Datumsgrenzwert durch Subtraktion der Tage von der aktuellen Zeit
5
posts_to_archive.update(is_archived=True)
Verwende update() für effiziente Bulk-Operation statt Iteration
6
self.style.SUCCESS()
Djangos Styling-Helper farbieren die Ausgabe im Terminal