Программы
Пример своей консольной команды в Django проекте

Пример своей консольной команды в Django проекте

Если вы работали с Django проектом, то, скорее всего, запускали команды из консоли (manage.py). В Django есть простой способ писать свои команды для управления проектом.

Для того, чтобы добавить команду в Django проект надо его определить в одном из подключённых проектов. Для этого в одном из создадим подмодуль management/commands и определить там модуль с командой. Например, мы хотим создать команду для генерации текста для предпросмотра заметки (приложение post):

post
└───management
    │   __init__.py
    │
    └───commands
            gen_preview.py
            __init__.py

Файлы __init__.py оставляем пустыми, а в gen_preview.py описываем команду:

from django.core.management.base import BaseCommand
from post.models import Post


class Command(BaseCommand):
    help = 'Генерирует preview-текст из текста заметки'

    def add_arguments(self, parser):
        parser.add_argument('ids', nargs='?', type=int)
        parser.add_argument(
            '--dry-run',
            action='store_true',
            help='Просто показать те заметки, что могут быть модифицированными',
        )


    def handle(self, *args, **options):
        if options['ids']:
            posts = Post.objects.filter(id__in=options['ids'], preview='')
        else:
            posts = Post.objects.all()

        for post in posts:
            if not options['dry_run']:
                post.preview = ' '.join(post.text.split()[:10])
                post.save()

            self.stdout.write(self.style.SUCCESS(f'Successfully generated for "{post}"'))

        self.stdout.write(self.style.SUCCESS('All done'))

В классе команды мы определяем help для указания общего описания команды.

Для определения аргументов создаём метод add_arguments. Если же нашей команде не нужны параметры вызова - можно и не писать этот метод. Сам синтаксис определения параметров схож с argparse, так что можно довольно гибко и понятно описать почти всё необходимое.

Сам же обработчик пишется в методе handle. Ключи и аргументы вызова команды прилетают в виде именованных параметров метода. Далее же всё как в обычной функции - пишите код обработчика, как вам будет угодно.

Для вывода же информации в Django команде стоит использовать self.stdout.write, ведь это будет не только информативно, но и красиво!

Если интересно, что дальше - читайте рубрику Django.

Также может быть вам интересно:

Разграничение прав доступа на Django сайте

Почти на любом веб-сайте необходимо разделять пользователей на группы и предоставлять им разные возможности. В Django есть довольно серьёзная система прав доступа для пользователей - давайте её рассмотрим!

Читать »

Добавляем переменные в контекст Django шаблонов (свой контекст-процессор)

В Django вы можете передавать данные в шаблоны посредством контекстов. Контекст передаётся из контроллера (view в терминах Django), однако, если одни и те же данные нужны в разных местах, лучше сделать свой контекст-процессор.

Читать »
Фото Как настроить отправку почты из Django

Как настроить отправку почты из Django

Письма об ошибках, отчёты на почту, восстановление паролей - всё это полезно при работе с сайтом. Django предоставляет удобный способ это сделать с минимумом настроек!

Фото Добавляем поддержку медиа-файлов в Django проект

Добавляем поддержку медиа-файлов в Django проект

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

Фото Настройка журналирования (логирования) в Python с примерами

Настройка журналирования (логирования) в Python с примерами

Во время работы программы часто нужно сохранять некоторые важные записи о процессе выполнения команды. В Python есть довольно мощный модуль для работы с логами - давайте разберёмся с тем, как его использовать.

Фото Шаблон разработки ПО — Model View Controller (MVC)

Шаблон разработки ПО — Model View Controller (MVC)

MVC - один из самых распространённых архитектурных шаблонов разработки. Часто используется в различных фреймворках. В том числе и в Django.

Фото Нет слов, одни... однострочники

Нет слов, одни... однострочники

На днях вышел пост со списком полезных однострочников для JavaScript программистов. Памятуя Perl-овую молодость, заглянул туда.

Фото Добавляем переменные в контекст Django шаблонов (свой контекст-процессор)

Добавляем переменные в контекст Django шаблонов (свой контекст-процессор)

В Django вы можете передавать данные в шаблоны посредством контекстов. Контекст передаётся из контроллера (view в терминах Django), однако, если одни и те же данные нужны в разных местах, лучше сделать свой контекст-процессор.

Фото Разграничение прав доступа на Django сайте

Разграничение прав доступа на Django сайте

Почти на любом веб-сайте необходимо разделять пользователей на группы и предоставлять им разные возможности. В Django есть довольно серьёзная система прав доступа для пользователей - давайте её рассмотрим!

Фото Пользователи и их создание в Django - своя регистрация на сайте

Пользователи и их создание в Django - своя регистрация на сайте

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