이번에는 Django_seeding에 대해 알아보겠습니다.
장고 시드는 가짜 데이터를 빠르게 만들 수 있도록 도와줍니다.
해당 폴더에 management 폴더를 만들고 그 폴더를 인식할 수 있도록 __init__.py
를 만듭니다. 그 후 commands라는 폴더에 __init__.py
를 만듭니다.
commands라는 폴더 안에서 seeding을 진행합니다.
pipenv install django-seed
로 설치한 후 config/settings.py의 THIRD_PARTY_APPS에 "django_seed"를 추가합니다.
예시로 loveyou.py파일을 만듭니다. 그 후 custom command를 쉽게 제작할 수 있도록 장고에서 제공된 baseCommand
를 생성합니다.
from django.core.management.base import BaseCommand
help
는 유저들에게 어떤 명령인지를 설명해줍니다. python manage.py loveyou --help
명령을 하면
"This command creates amenities"라며 답변을 해 줍니다.
from django.core.management.base import BaseCommand
class Command(BaseCommand):
help = "This command creates amenities"
add_arguments
는 유저들이 custom command에 요구하도록 arguments를 추가합니다.
from django.core.management.base import BaseCommand
class Command(BaseCommand):
help = "This command creates amenities"
def add_arguments(self, parser):
parser.add_argument(
"--times", help="How many times to tell?"
)
다음의 코드는 python manage.py loveyou --times '횟수'
로 인식합니다.
이때 BaseCommand는 handle()을 제공해야만 하는데요!
handle()
은 self
, *args
, **options
파라미터를 갖습니다.
from django.core.management.base import BaseCommand
class Command(BaseCommand):
help = "This command creates amenities"
def add_arguments(self, parser):
parser.add_argument(
"--times", help="How many times to tell?"
)
def handle(self, *args, **options):
times = options.get("times")
for t in range(0, int(times)):
self.stdout.write(self.style.SUCCESS("I love you"))
#성공, 경고, 에러 마다 색상이 다르게 하기 위함.
이 코드를 python manage.py loveyou --times 10
을 실행하면 "I love you"가 10번 입력됩니다.
이제 amenity를 seeding해봅시다.
commands 폴더 내에 seed_amenities.py 파일을 만듭니다. 그 후 모델을 import 하고, handle()에 뿌리고 싶은 seed를 넣습니다.
from django.core.management.base import BaseCommand
from rooms.models import Amenity # 모델을 import 합니다.
class Command(BaseCommand):
help = "This command creates amenities"
def add_arguments(self, parser):
parser.add_argument("--number", help="How many amenities?")
def handle(self, *args, **options):
amenities = [
"Air conditioning",
"Alarm Clock", # 등등 뿌리고 싶은 seed를 넣습니다.
]
for a in amenities:
Amenity.objects.create(name=a)
self.stdout.write(self.style.SUCCESS("Amenities created!"))
for a in amenities:
구문을 보면 for 현재 아이템 in array(배열)
로 현재 아이템은 "Air conditioning", "Alarm Clock", 등의 seed가 해당됩니다.
그 후 self.stdout.write(self.style.SUCCESS("Amenities created!"))
코드를 통해 Amenities created!라고 초록색의 SUCCESS 문구를 띄어줍니다.
python manage.py seed_amenities
로 실행합니다.