Back-end

Tworzenie niestandardowych komend zarządzania dla aplikacji Django

Django posiada wiele wbudowanych poleceń zarządzania, ale czasem potrzebujemy dodatkowych. W tym artykule opowiem, jak stworzyć i zarejestrować niestandardowe komendy w aplikacji Django, ułatwiając sobie pracę i usprawniając projektowanie.

21 cze 2023

W Django istnieje wiele wbudowanych komend zarządzania umożliwiających wykonywanie różnych czynności związanych z zarządzaniem aplikacją. W domyślnym setupie możemy stworzyć superusera, zastosować, czy utworzyć migrację. Jednakże, czasem potrzebujemy stworzyć własną komendę zarządzania, aby wykonać niestandardowe zadanie. Szczególnie przydaje się to, gdy chcemy zautomatyzować powtarzające się czynności, takie jak czyszczenie danych w celach developmentu albo tworzenie danych testowych. W Django tworzenie własnych komend jest bardzo proste i pozwala na szybkie i wygodne zarządzanie aplikacją.

 

Testowanie niestandardowych komend

Podczas tworzenia niestandardowych komend zarządzania dla aplikacji Django warto również zwrócić uwagę na testowanie ich funkcjonalności. Przed wdrożeniem aplikacji na serwer testy pozwalają na wykrycie i naprawienie ewentualnych błędów w działaniu komend. Django pozwala na tworzenie testów jednostkowych dla komend, co znacznie ułatwia proces sprawdzania ich poprawności. W metodzie testującej należy odpowiednio skonfigurować obiekt Command oraz przeanalizować zwracane przez nią wartości. Dzięki temu można skutecznie zweryfikować działanie niestandardowych komend i zapewnić użytkownikom aplikacji najlepszą jakość usług.

 

Integracja niestandardowych komend z aplikacją Django

Instrukcja krok po kroku:

Dodajemy plik do folderu management/commands. Nazwa pliku będzie nazwą naszą komendy.

W pliku importujemy klasę BaseCommand z django.core.management.base. Nasza klasa komendy dziedziczy po zaimportowanej klasie. Za obsługę wywołania komendy odpowiedzialna jest metoda handle. W razie błędu podczas wykonywania komendy, rzucamy wyjątek CommandError zaimportowany z tego samego miejsca, co BaseCommand. Argumenty komendy parsuje metoda add_arguments. Otrzymujemy je w argumentach nazwanych metody handle.  Oto prosty przykład komendy, wypisujący do konsoli nazwę obiektu Company, po podaniu jego ID.

 

from django.core.management.base import BaseCommand, CommandError

from company.models import Company

class Command(BaseCommand):

	def add_arguments(self, parser) -> None:
		parser.add_argument('company_id', type=int)

	def handle(self, *args, **kwargs) -> None:
		try:
			company = Company.objects.get(pk=kwargs['company_id')
		except Company.DoesNotExist:
			raise CommandError(f"Company {kwargs['company_id']} not found"
		self.stdout.write(company.name)
		

 

Metodę możemy wywołać w terminalu za pomocą polecenia:

 python manage.py <nazwa_komendy - nazwa pliku> [...argumenty]

FAQ

Najczęstsze pytania

  • Django ma wbudowane komendy — tworzenie superusera czy migracje — ale własne komendy przydają się do niestandardowych zadań, szczególnie automatyzacji powtarzających się czynności, jak czyszczenie danych w celach developmentu albo tworzenie danych testowych.
  • Dodać plik do folderu management/commands (nazwa pliku będzie nazwą komendy), zaimportować klasę BaseCommand z django.core.management.base i dziedziczyć po niej. Za obsługę wywołania odpowiada metoda handle, a argumenty parsuje metoda add_arguments.
  • W razie błędu podczas wykonywania komendy rzuca się wyjątek CommandError, importowany z tego samego miejsca co BaseCommand — np. gdy obiekt o podanym ID nie istnieje w bazie danych.
  • W terminalu poleceniem „python manage.py [...argumenty]” — nazwa komendy odpowiada nazwie pliku umieszczonego w folderze management/commands.
  • Django pozwala tworzyć testy jednostkowe dla komend — w metodzie testującej należy odpowiednio skonfigurować obiekt Command i przeanalizować zwracane wartości. Testy przed wdrożeniem pozwalają wykryć i naprawić błędy w działaniu komend.

Blog

Powiązane artykuły

Czytaj więcej
Back-end

Japronto - szybki framework webowy

Japronto to niewielki i bardzo szybki framework webowy dla Pythona, który idealnie nadaje się do budowania wydajnych serwisów internetowych. Dzięki wbudowanemu serwerowi HTTP opartemu na Asyncio i niskiemu narzutowi, Japronto oferuje bardzo wysoką wydajność i skalowalność. Jeśli szukasz szybkiego i prostego frameworka dla swojego projektu webowego, Japronto jest warty rozważenia.

Tomasz Kozon
08 kwi 2023
Back-end

Falcon: lekki i szybki framework webowy

Falcon to framework webowy napisany w Pythonie, który cechuje się niskim zużyciem zasobów i bardzo szybką wydajnością. Doskonale sprawdza się w tworzeniu REST API oraz mikroserwisów. W artykule przedstawimy jego główne cechy i funkcjonalności.

Tomasz Kozon
04 kwi 2023
Back-end

Amazon CloudFront - jak wykorzystać tę sieć dostarczania treści?

Amazon CloudFront to sieć dostarczania treści (CDN) oferowana przez Amazon Web Services (AWS), która pozwala na przyspieszenie dostarczania treści do użytkowników poprzez wykorzystanie lokalizacji brzegowych. Dzięki temu, treść jest dostarczana z najbliższej lokalizacji do użytkownika, co zwiększa szybkość i jakość dostarczanej treści.

Tomasz Kozon
27 cze 2022
Back-end

InertiaJS - Co to jest i dlaczego warto z niego korzystać?

InertiaJS zyskuje na popularności, jako narzędzie integrujące najnowsze frameworki frontendowe (Vue, React, Svelte) z tradycyjnymi serwerowymi technologiami backendowymi. Zrozumienie jego działania pozwala płynnie łączyć frontend i backend, bez konieczności pisania API.

Tomasz Kozon
23 mar 2025
Back-end

MERN Stack – charakterystyka i zastosowanie

MERN Stack to jeden z najpopularniejszych zestawów technologii wykorzystywanych do tworzenia nowoczesnych aplikacji webowych. Dzięki połączeniu MongoDB, Express, React oraz Node.js umożliwia on budowę wydajnych i skalowalnych rozwiązań opartych w całości na języku JavaScript. Stack ten jest chętnie wybierany zarówno przez startupy, jak i doświadczone zespoły developerskie.

Tomasz Kozon
14 gru 2025