Django 6

김기현·2022년 2월 5일
0

django

목록 보기
6/8
post-thumbnail

이번에는 Django_seeding에 대해 알아보겠습니다.

장고 시드는 가짜 데이터를 빠르게 만들 수 있도록 도와줍니다.
해당 폴더에 management 폴더를 만들고 그 폴더를 인식할 수 있도록 __init__.py를 만듭니다. 그 후 commands라는 폴더에 __init__.py를 만듭니다.

commands라는 폴더 안에서 seeding을 진행합니다.

example

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번 입력됩니다.

practice

이제 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로 실행합니다.

profile
피자, 코드, 커피를 사랑하는 피코커

0개의 댓글