Django에서 custom management commands 만들기

2020. 11. 10. 00:46Django

https://docs.djangoproject.com/en/3.1/howto/custom-management-commands/

 

Writing custom django-admin commands | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

python에서 manage.py 뒤에 입력할 명령어를 직접 만들 있다.

cumstom command 만들면

python manage.py 명령어

이렇게 터미널에 입력하면 촤촤촤 동작하는 거임.

 

문서에 나와 있듯이 명령어를 만들고자 하는 경로의 순서와 이름을 위와 같이 해야 한다.

문서에서는 장고 내의 경로에 만들라고 했는데, 나는 특정 내에서 만들려고 했던 아니라서 공통 파일들을 담고 있는 common 생성하였다.

__init__.py 파일은 그냥 최하단에 하나 만들어 줬더니 상위 경로에도 갑자기 생겼다. ㅎㅎ... 모듈화 그런건가?

명령어의 네이밍은 문서에서도 딱히 어떤 명명규칙을 따른 같지 않아서 나도 그냥 .

 

여튼 이렇게만 하면 작동을 하지 않아서 common settings.py 내의 INSTALLED_APPS 추가해 주었다.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    ...
    'common'
]

이제 renewdata.py 다음과 같이 작성한다.

from django.core.management.base import BaseCommand, CommandError
from studydata.models import Flower, FlowerGarden, Leaf
from user.models import User

import datetime

class Command(BaseCommand):
    help = 'Renew data at midnight everyday'

    def handle(self, *args, **options):
        # User 조희
        users = User.objects.filter(nickname='박범희')

        for user in users:
            # 해당 user에 대한 Flower 조회
            flowers = Flower.objects.filter(st_id=user.st_id)
            # user의 flower가 없는 경우 에러 메시지
            if flowers.count() == 0:
                self.stdout.write(self.style.ERROR('No flower of the user: ' + user.st_id))
            else:
                # 정상
                for flower in flowers:
                    self.stdout.write(self.style.SUCCESS(flower.st_id))

문서를 읽어보고 따라해야 .

클래스 이름은 대문자 C 시작하는 Command여야 하고, django의 BaseCommand를 상속해야 한다. handle 함수도 작성해야 한다.

다른 사람은 input 대한 함수도 작성했는데 나는 딱히 필요 없었음.

 

간단하게 출력 메시지를 확인하기 위해서 대충 저렇게 데이터 조회를 했다.

잘됨!!

별로 중요하진 않은데 출력 메시지에 관한 내용은 다음에 있음.

https://docs.djangoproject.com/en/3.1/ref/django-admin/#syntax-coloring

 

django-admin and manage.py | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com