Django
Writing Custom django-admin command
nickas
2019. 8. 30. 10:48
Why?
standalone script를 실행하고자 하는 경우, DB에 어떤 내용을 넣고 싶은 경우, 기타 등등 작업이 필요한 경우 custom command를 만들어 사용하면 유용.
How?
해당 app 디렉토리에 app/management/commands/command_name.py 형식으로 파이썬 파일 생성.
파일 이름이 command 이름이 됨.
from django.core.management.base import BaseCommand, CommandError
class Command(BaseCommand):
help = 'Help message'
def add_arguments(self, parser):
# CLI 창에서 받을 argument 정의
parser.add_argumnet('argument', nargs='+', type=int)
def handle(self, *args, **options):
# 실제 command가 수행 할 내용
try:
print('I am custom command')
except ErrorException:
raise CommandError('I am Error')
# CLI 창에 메시지 출력
self.stdout.write(self.style.SUCCESS('Successfully updated all Lotto numbers'))
메시지 출력 style는 아래와 같이 제공
- 'ERROR'
- 'SUCCESS'
- 'WARNING'
- 'NOTICE'
- 'SQL_FIELD'
- 'SQL_COLTYPE'
- 'SQL_KEYWORD'
- 'SQL_TABLE'
- 'HTTP_INFO'
- 'HTTP_SUCCESS'
- 'HTTP_REDIRECT'
- 'HTTP_NOT_MODIFIED'
- 'HTTP_BAD_REQUEST'
- 'HTTP_NOT_FOUND'
- 'HTTP_SERVER_ERROR'
- 'MIGRATE_HEADING'
- 'MIGRATE_LABEL'
TEST
from io import StringIO
from django.core.management import call_command
from django.test import TestCase
class ClosepollTest(TestCase):
def test_command_output(self):
out = StringIO()
call_command('closepoll', stdout=out)
self.assertIn('Expected output', out.getvalue())
Writing custom django-admin commands | Django documentation | Django
Django The web framework for perfectionists with deadlines.
docs.djangoproject.com