본문 바로가기

Django

Django management command 사용하기

일단 시작 하기에 앞서 프로젝트에 management/command와 같이 폴더를 만들어준다.

어디든 상관 없다. 본인이 알 수 있는곳에 생성한다.

만약, 어디에 생성해야할지 고민이라면 일단 필자의 경로와 같이 만들어보자.

프로젝트 제일 상단 즉, 프로젝트를 만들때 startapp으로 생성한 폴더와 같은 위치(동등한 위치)에 core라는 폴더를 만들어 주고 management/command 폴더(오타나면 안됨)를 순서대로 만들어준다.

그리고 command 폴더 아래에 파일을 생성할껀데 무슨이름으로 해도 상관은 없지만 _(밑줄)을 사용한 이름을 사용할 수 없다. (ex) _private.py) 이것만 주의 한다면 어떠한 이름으로 한들 상관없다.

그럼 코드를 보며 구조를 살펴 보자

import random
from django.core.management.base import BaseCommand

class Command(BaseCommand):
      help = '커멘드 클래스 사용해보기'

    def add_arguments(self, parser):
          parser.add_argument(
                '--num',  # 본인이 원하는 명령어를 넣어도 된다.
              default=2,  # 넣어도 되고 빼도 되는데 고정값을 넣고 싶으면 이렇게 넣는다.
              type=int,  # argument로 받는 값의 type을 지정해줄 수 있다.
              help='해당 값을 입력하기 위해 도움 될 수 있는 말 입력'
        )

    def handle(self, *args, **options):
          for i in options['num']:  # options는 add_arguments() 메서드에서 가져온 내용이며 위에서 num을 써줬기에 options['num']으로 가져올 수 있는거다.
                User.objects.create(
                    'fullname': '같은이름',
                  'gender': lambda x: random.randint(0, 3),
                  'is_active': True,
                  'is_admin': False
            )
            # 위와 같이 본인이 num에서 받은 수만 큼 User 데이터를 생성 할 수 있다.

        # 위의 내용이 정상적으로 실행되면 아래의 구문이 나타난다.
                self.stdout.write(self.style.SUCCESS('data create success~'))

추가적으로 보자면 클래스 명인 Command가 변경되면 실행되지 않는다.

Command 클래스의 handle() 메서드가 실행되는 방식이다.

그리고 add_arguments() 메서드에서 -- 가 붙은 구문에 대해서 궁금할 수 도 있는데, --가 없다면 그 값에 대해선 필수값으로 인식 한다.

'Django' 카테고리의 다른 글

django API 문서 설정 (drf-yasg)  (0) 2021.08.03
Django seed로 테스트 데이터 자동 생성  (0) 2021.06.30
Django User model Custom  (0) 2021.06.29
DRF ModelSerializer  (0) 2021.06.19
DRF serializer  (0) 2021.06.19