Django-command - инструмент командной строки, который позволяет выполнять часто используемые команды при разработке проектов на фреймворке Django. Данный инструмент помогает повысить эффективность разработки и упростить рабочие процессы, связанные с веб-приложениями на Django.

Для кого это статья?

Статья предназначена для разработчиков проектов на фреймворке Django, которые хотят повысить эффективность своей работы.

Введение

При разработке проектов на фреймворке Django мне часто приходилось выполнять однотипные рутинные задачи: создание миграций, применения миграций, обновление локалей и так каждый раз при изменении моделей базы данных. Приходилось запоминать большой набор команд и их аргументов. Конечно все команды я хранил в одном файле и тащил этот файл из проекта в проект. С ростом количество проектов для меня это стало не удобным каждый раз заглядывать в файл в поиске нужной команды. Мне хотелось более удобный инструмент, который позволил бы оптимизировать мою работу. В просторах интернета я не нашел подходящее решение этой проблемы. В результате я решил создать свой собственный инструмент django-command, который бы предоставлял удобный интерактивный интерфейс, а также с возможностью запуска из консоли без интерактива.

Установка и использование

Для установки django-command можно использовать pip:

pip install django-command

Существует несколько способов запуска команд:

  1. В терминале наберите django-command, после этого появится в интерактивном режиме список доступных команд для выполнения, отметьте через пробел какие команды выполнить. Отмеченные команды будут выполняться по порядку выбора.

    (venv) PS .\> django-command
    [?] Select 1 or more commands:
     > [ ] create_local                   [1] Creating locales (ru, en)
       [ ] update_local                   [2] Updating and compiling locales
       [ ] collect_static                 [3] Assembling static files in the STATIC_ROOT folder
       [ ] make_migrations                [4] Creating migrations
       [ ] make_migrations_app            [5] Creating the first migration for the application
       [ ] make_empty_migrations_app      [6] Create a blank migration for the application. Used to add default data to the database table
       [ ] migrate                        [7] Applying migrations [--db_label default]
       [ ] create_superuser               [8] Creating a user with superuser rights
       [ ] create_app                     [9] Creating an application
       [ ] run_server                     [10] Running a project on a port number, or ipaddr:port (default "127.0.0.1:8000") [--port 127.0.0.1:8000]
       [ ] install_requirements           [11] Install all dependencies for a project from a file (default "requirements.txt")
       [ ] print_requirements             [12] Automatically generates all the necessary dependencies for the project, and also allows you to save this list to a file (default "requirements.txt") [--save_in_file requirements.txt]
  2. Команды можно выполнять по их названию или по номеру.

    django-command make_migrations migrate
    # or with argument
    django-command make_migrations migrate -db default
    # or
    django-command 4 7

Описания команд и аргументов

Для просмотра списка доступных команд нужно ввести в терминале.

(venv) PS .\> django-command -h
usage: django-command [-h] [-db DB_LABEL] [-s SAVE_IN_FILE] [-p PORT] [-v] commands [commands ...]   

CLI tool that allows you to run commonly used commands when developing Django projects.              

positional arguments:                                                                                
 commands              commands to run: create_local, update_local, collect_static, make_migrations,
                       make_migrations_app, make_empty_migrations_app, migrate, create_superuser,   
                       create_app, run_server, install_requirements, print_requirements             

optional arguments:
 -h, --help            show this help message and exit
 -db DB_LABEL, --db_label DB_LABEL
                       database label for "migrate" command
 -s SAVE_IN_FILE, --save_in_file SAVE_IN_FILE
                       save to file for "print_requirements" command
 -p PORT, --port PORT  port number, or ipaddr:port for "run_server" command
 -v, --version         show program's version number and exit

Команды в django-command

Аналог команды в django

create_local

django-admin makemessages -l

Создает файлы локалей (ru, en) для интернационализации.

update_local

django-admin makemessages -a

django-admin compilemessages

Обновление и компиляция локалей.

collect_static

python manage.py collectstatic

Собирает статические файлы в папке STATIC_ROOT.

make_migrations

python manage.py makemigrations

Создает миграции для всех приложений.

make_migrations_app

python manage.py makemigrations {app_name}

Создает миграции для конкретного приложения.

make_empty_migrations_app

python manage.py makemigrations --empty {app_name}

Создает пустую миграцию для конкретного приложения.

migrate

python manage.py migrate

Применение миграций. Обновляет схему базы данных.

create_superuser

python manage.py createsuperuser

Создает пользователя с правами администратора.

create_app

python manage.py startapp {app_name}

Создает новое приложение внутри проекта Django.

run_server

python manage.py runserver

Запускает веб-сервер для разработки, а также обслуживает статические файлы.

install_requirements

pip install -r {file_name}

Установит все зависимости для проекта из файла (по умолчанию «requirements.txt»)

print_requirements

pip freeze > {file_name}

Автоматически генерирует все необходимые зависимости для проекта, а также позволяет сохранить этот список в файл.

Как видно из таблицы приходилось запоминать много разных команд и их аргументов для полноценного создания проектов на Django. А теперь достаточно только запомнить и набрать 1 команду.

django-command

Теперь рутинная задача: создание миграций, применения миграций, обновление локалей выглядит так.

django-command make_migrations migrate update_local
# или
django-command 4 7 2

Заключение

Инструмент django-command, является эффективным способом повышения продуктивности разработки проектов на фреймворке Django. Он поможет автоматизировать рутинные задачи, повысит общую эффективность разработки и снижает вероятность ошибок.

Надеюсь, что статья поможет сэкономить Вам хоть немного времени при написании проектов на фреймворке Django, а также дать быстрый старт новичкам без необходимости проводить часы в поисках часто используемых команд.

Буду рад обратной связи. В комментариях напишите, а как Вы решаете данную задачу. И какие команды Вы используете у себя в Django проектах.

Комментарии (10)


  1. danilovmy
    20.09.2024 15:07
    +2

    А ссылку на репозиторий религия не позволяет разместить или что? https://github.com/AbbasIsaev/django-comинтерейс приятный mand

    Интерфейс приятный, но выбор команд странный, и, если есть IDE, что мешало установить plugin “Django Commands” выполняющий то же самое?


    1. Abbas_I Автор
      20.09.2024 15:07

      Да, конечно, можно использовать плагин, но не во всех IDE есть такой плагин. Например, в котором я использую его нет.


  1. SergeiMinaev
    20.09.2024 15:07

    С ростом количество проектов для меня это стало не удобным каждый раз заглядывать в файл в поиске нужной команды

    Список команд же можно посмотреть, вызвав ./manage.py без аргументов.

    • Команды можно выполнять по их названию или по номеру.

      django-command make_migrations migrate
      # or with argument
      django-command make_migrations migrate -db default
      # or
      django-command 4 7

    Если аргументы всё равно нужно прописывать самостоятельно, то чем это лучше, чем `./manage.py makemigrations && ./manage.py migrate`? К тому же, у вас ещё и названия команд отличаются от оригинальных.


    1. Abbas_I Автор
      20.09.2024 15:07

      Эту программу можно запускать и в интерактивном режиме, тогда она подскажет какие аргументы нужны для выполнения команды. В интерактивном режиме можно выбрать и выполнить несколько команд за раз и в любой последовательности, это ускоряет процесс разработки и минимизирует опечатки при наборе команд.


  1. iredun
    20.09.2024 15:07
    +2

    А почему не Makefile, на крайний случай bash/cmd скрипт? Один раз написал/настроил и используешь везде.


    1. Abbas_I Автор
      20.09.2024 15:07

      Makefile, bash/cmd скрипты требуют дополнительных установок/настроек. Когда у тебя не 1 проект, а много эти файлы приходится тащить. Эта библиотека https://pypi.org/project/django-command/ позволяет избежать этого и в удобном интерактивном режиме подскажет, где и какие аргументы необходимо заполнить для выполнения команды.


  1. TyVik
    20.09.2024 15:07

    Или добавьте эти команды в pdm/poetry. Будет `pdm run makemigrations` - он сам подгрузит из .env переменные окружения и запустит django команду. Причём мне больше нравится именно pdm, т.к. он умеет выполнять не только python скрипты.


  1. Adilet-novichok
    20.09.2024 15:07
    +1

    Лично я использую алиасы в bash:

    alias run="python manage.py runserver"
    alias mm="python manage.py makemigrations"
    alias m="python manage.py migrate"

    Быстро и удобно


    1. Tele-Searching
      20.09.2024 15:07

      Самый ленивый и удобный вариант как по мне:

      alias d="python manage.py $1"


    1. dilmah949
      20.09.2024 15:07

      Интересненько!