Создание сайта на Django: Урок 52, создание собственных команд (резервное копирование базы данных)
avatar
7 | (offline)
❤️‍🔥Notehunter Developer
Добавлено:
Категория: Руководства «Django»
Комментариев: 0

Создание своей кастомной команды

В модуле "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

Комментарии к статье 0
Комментариев нет
Форма добавления комментария (необходима регистрация)