티스토리 뷰

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())

 

 


https://docs.djangoproject.com/en/2.2/howto/custom-management-commands/#management-commands-and-locales

 

Writing custom django-admin commands | Django documentation | Django

Django The web framework for perfectionists with deadlines.

docs.djangoproject.com

 

'Django' 카테고리의 다른 글

ViewSets & Routers  (0) 2019.08.29
Relationships & Hyperlinked APIs  (0) 2019.08.29
REST API Authentication & Permissions  (0) 2019.08.29
Rest Framework Views  (0) 2019.08.29
Serializer  (0) 2019.08.29
최근에 올라온 글
글 보관함