-
[Python] shell 명령어를 만들고 사용해보자 (BaseCommand)Python/Django 2021. 12. 9. 23:27
1. App dir 안에 management라는 dir와 __init__.py를 만든다.
2. 그안에 commands라는 dir와 __init__.py를 만든다
3. 그안에 사용할 명령어로된 이름의 파이썬 파일을 만든다
예) python manage.py seed_rooms = rooms.management.commands.seed_rooms.py
# seed_rooms.py import random # BaseCommand 이거 필수! from django.core.management.base import BaseCommand from django_seed import Seed from rooms import models as room_models from users import models as user_models class Command(BaseCommand): help = "This command creates rooms" # 명령어에 arg를 넣어 줄수 있다. # 예) $ python manage.py seed_rooms --numbers 50 def add_arguments(self, parser) -> None: parser.add_argument( # arg 이름 "--numbers", # 입력이 없을 경우 디폴트 default=1, # 인풋타입 type=int, # python manage.py --help를 하게 되면 아래 글이 뜬다. help="How many rooms do you want to create?", ) # 해당 명령어가 실행된 시 수행할 코드 # 아래 보는 코드는 Room이라는 모델로 db에 가짜 데이터를 넣어준다. def handle(self, *args, **options): # 넘겨 받은 명령어의 arg number = options.get("numbers") # 가짜 데이터 만들어 주는 Seed 패키지 seeder = Seed.seeder() # 모든 user에 대한 정보 가지고 오기 all_users = user_models.User.objects.all() # room types에 대한 정보 가지고 오기 room_types = room_models.RoomType.objects.all() # 실제로 db에 정보를 넣어주는 코드 seeder.add_entity( # 모델 지정 room_models.Room, # 몇개의 데이터를 넣을지 매개변수로 알려준다 number, { # int혹은 text가 아닌 관계를 맺고 있는 fields들에 대한 랜덤 지정 "host": lambda x: random.choice(all_users), "room_type": lambda x: random.choice(room_types), }, ) # 시더실행 seeder.execute() # 성공시 콘솔에 띄어주는 프린트(엄밀히 말하면 프린트는 아니지만) self.stdout.write(self.style.SUCCESS(f"{number} Rooms Created!"))
'Python > Django' 카테고리의 다른 글
[Python] Class Based Views를 사용해보자 (0) 2021.12.11 [Python] Django의 Paginator로 쉽게 페이징 해주자 (0) 2021.12.10 [Python] admin안에 admin을 넣어보자 (TabularInline, inlines) (0) 2021.12.08 [Python] tag return 하기 (0) 2021.12.08 [Python] 가상환경, 패키지매니저 pipenv (0) 2021.12.03