일단 시작 하기에 앞서 프로젝트에 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 |