Создание своей кастомной команды
В модуле "system", создадим папку с названием management и внутри папки management папку commands, а в папке commands мы создаем уже файл dbackup.py
Должно получиться вот так:

Отлично. Теперь давайте внутри файла dbackup.py напишем необходимую функцию для создания резервной копии базы данных:
modules/system/management/commands/dbackup.py
from django.core.management import BaseCommand
from django.core.management import call_command
class Command(BaseCommand):
"""
Команда для создания резервной копии базы данных
"""
def handle(self, *args, **options):
self.stdout.write('Waiting for database dump...')
call_command('dumpdata', '--natural-foreign', '--natural-primary', '--exclude=contenttypes', '--exclude=admin.logentry', '--exclude=auth.permission', '--indent=4', '--output=db.json')
self.stdout.write(self.style.SUCCESS('Database successfully backed up'))
Пояснение:
- Мы импортируем и наследуемся от класса Django BaseCommand
- Также пользуемся вызовом необходимой команды с помощью call_command
Вкратце: мы взяли за основу команду dumpdata и придали ей полноценный вид в одной команде.
Давайте проверим добавилась ли наша команда:
py manage.py help
Type 'manage.py help <subcommand>' for help on a specific subcommand.
Available subcommands:
[auth]
changepassword
createsuperuser
[contenttypes]
remove_stale_contenttypes
[debug_toolbar]
debugsqlshell
[django]
check
compilemessages
createcachetable
dbshell
diffsettings
dumpdata
flush
inspectdb
loaddata
makemessages
makemigrations
migrate
optimizemigration
sendtestemail
shell
showmigrations
sqlflush
sqlmigrate
startproject
test
testserver
[sessions]
clearsessions
[sitemaps]
ping_google
[staticfiles]
collectstatic
findstatic
runserver
[system]
dbackup
Как видим, наша команда добавилась в список.
А теперь я попробую вызвать эту команду и посмотреть результат:
(venv) PS C:\Users\Razilator\Desktop\Courses\App\backend> py manage.py dbackup
Waiting for database dump...
[...........................................................................]
Database successfully backed up
После работы команды dbackup видим, что в корневом каталоге появился файл db.json, который содержит все данные с нашей БД.

В следующем уроке мы автоматизируем резервное копирование с помощью Celery.