티스토리 뷰

728x90
반응형

이 문서를 보고 Custom Management Command를 만들어보도록 하겠습니다. 

 

[1]  Custom Management Command란

 

우선 Management Command란

우리가 자주하는 기본 명령어들을 말합니다. (python manage.py로 시작하는) 

python manage.py runserver
python manage.py migrate

 

그럼 Custom Management Command란

아래와 같은 명령어를 의미하는 거겠네요-!

ptyhon manage.py 나의 커스텀 액션

 

[2] 문서보기 

 

장고의 앱들은 각각의 액션을 manage.py에 등록할 수 있습니다. 

예를들어 polls앱에서는 closepoll이라는 custom command를 만들어서 돌리고 싶을 수 있겠습니다. 

 

python manage.py closepoll <poll_ids>

 

이를 위해 앱에 management/commands 라는 디렉토리를 만들어주세요

장고는 이 디렉토리에 있는 모듈을 커맨드로 등록할 것 입니다. 

 

다만 파일명이 underscore로 시작하지 않는 것들만 등록한다고 합니다. 

아래 사진처럼 되어있다면 장고는 _private.py말고 closepoll.py만 management command로 등록하겠죠?!

 

 

그리고 파일 안에서는  BaseCommand 를 상속받은 Command를 만들어주면 됩니다. 

 

 

참고로 console에 output이 찍히기 원한다면 self.stdout 를 쓰라고 하네요. (위 코드의 맨마지막줄)

 

 

[3] Custom Command 만들고 실행해보기

 

저는 question앱에 만들어볼게요

 

management/commands 디렉토리를 만들어주고

makequestion.py 파일을 만들어줬어요 

 

 

 

그리고 문서 코드를 참고해서 Command를 이렇게 만들어줬습니다. 

 

from django.core.management.base import BaseCommand, CommandError
from question.models import Question
class Command(BaseCommand):
help = '타이틀를 입력하여 질문을 만듭니다.'
def add_arguments(self, parser):
parser.add_argument('title', type=str)
def handle(self, *args, **options):
title = options['title']
question = Question(title=title)
question.save()
self.stdout.write('Successfully make question "%s"' % title)
view raw makequestion.py hosted with ❤ by GitHub

 

그리고 터미널에 만든 command를 실행해보면

python manage.py makequestion 테스트질문입니다

 

잘된다고 나오고 

 

 

로컬 서버를 돌리고 관리자사이트에 들어가보면 

python manage.py runserver localhost:8000

 

만든 질문이 DB에 잘 추가된 것을 볼 수 있습니다. 

 

 

반응형
댓글