YUYANE

Django / manage.py commands 커스터마이징 하기 본문

Framework/DJANGO

Django / manage.py commands 커스터마이징 하기

YUYA 2021. 3. 7. 21:56

학습 강의

nomadcoders.co/airbnb-clone/lobby

 

 

장고 프로젝트에서 명령을 실행할 때 아래와 같은 구문을 쓴다. 오늘은 정해진 명령어를 사용하는 대신 명령어를 커스터마이징 하는 방법에 대해 알아보자.

python manage.py 명령어

 

 

디렉토리 구조

 

장고 프로젝트에서 어떤 앱이든 커스터마이징 한 command를 manage.py 에 등록할 수 있다.

우선, 아래와 같이 원하는 앱 폴더(polls)에 management/commands 디렉토리를 추가하자.

 

polls/
    __init__.py
    models.py
    management/
        commands/
            _private.py
            closepoll.py
    tests.py
    views.py

 

그러면 Django는 이름이 밑줄로 시작하지 않는 디렉토리의 각 Python 모듈에 대해 manage.py 명령을 등록한다.

예시에서 살펴보면 closepoll.py만 management 명령으로 사용될 수 있다. 

 

 

 

파일 구조

 

위의 closepoll.py가 command로 사용되려면 BaseCommand(혹은 하위클래스)를 상속한 Command 클래스가 필요하다.

예시는 아래와 같다. handle() 메소드 구현은 필수!

 

BaseCommand, CommandError
from polls.models import Question as Poll

class Command(BaseCommand):
    help = 'Closes the specified poll for voting'

    def add_arguments(self, parser):
        parser.add_argument('poll_ids', nargs='+', type=int)

    def handle(self, *args, **options):
        for poll_id in options['poll_ids']:
            try:
                poll = Poll.objects.get(pk=poll_id)
            except Poll.DoesNotExist:
                raise CommandError('Poll "%s" does not exist' % poll_id)

            poll.opened = False
            poll.save()

            self.stdout.write(self.style.SUCCESS('Successfully closed poll "%s"' % poll_id))

 

 

 

 

 

참고

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

'Framework > DJANGO' 카테고리의 다른 글

Django / No changes detected  (0) 2021.03.14
Django / view.py  (0) 2021.03.09
Django / Model 메소드 오버라이딩  (0) 2021.02.25
Django / MEDIA_ROOT, MEDIA_URL  (0) 2021.02.24
Django / Managers와 QuerySet (related_name)  (0) 2021.02.24
Comments