2020. 11. 10. 00:46ㆍDjango
https://docs.djangoproject.com/en/3.1/howto/custom-management-commands/
Writing custom django-admin commands | Django documentation | Django
Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate
docs.djangoproject.com
python에서 manage.py 뒤에 입력할 명령어를 직접 만들 수 있다.
cumstom command를 만들면
python manage.py 명령어
이렇게 터미널에 입력하면 촤촤촤 동작하는 거임.
문서에 나와 있듯이 명령어를 만들고자 하는 경로의 순서와 이름을 위와 같이 해야 한다.
문서에서는 장고 내의 앱 경로에 만들라고 했는데, 나는 특정 앱 내에서 만들려고 했던 게 아니라서 공통 파일들을 담고 있는 common에 생성하였다.
__init__.py 파일은 그냥 최하단에 하나 만들어 줬더니 상위 경로에도 갑자기 생겼다.ㅎ ㅎㅎ... 모듈화 뭐 그런건가?
명령어의 네이밍은 문서에서도 딱히 어떤 명명규칙을 따른 것 같지 않아서 나도 그냥 함.
여튼 이렇게만 하면 작동을 하지 않아서 이 common을 settings.py 내의 INSTALLED_APPS에 추가해 주었다.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
...
'common'
]
이제 renewdata.py에 다음과 같이 작성한다.
from django.core.management.base import BaseCommand, CommandError
from studydata.models import Flower, FlowerGarden, Leaf
from user.models import User
import datetime
class Command(BaseCommand):
help = 'Renew data at midnight everyday'
def handle(self, *args, **options):
# User 조희
users = User.objects.filter(nickname='박범희')
for user in users:
# 해당 user에 대한 Flower 조회
flowers = Flower.objects.filter(st_id=user.st_id)
# user의 flower가 없는 경우 에러 메시지
if flowers.count() == 0:
self.stdout.write(self.style.ERROR('No flower of the user: ' + user.st_id))
else:
# 정상
for flower in flowers:
self.stdout.write(self.style.SUCCESS(flower.st_id))
문서를 잘 읽어보고 따라해야 함.
클래스 이름은 꼭 대문자 C로 시작하는 Command여야 하고, django의 BaseCommand를 상속해야 한다. handle 함수도 꼭 작성해야 한다.
다른 사람은 input에 대한 함수도 작성했는데 나는 딱히 필요 없었음.
간단하게 출력 메시지를 확인하기 위해서 대충 저렇게 데이터 조회를 했다.
잘됨!!
별로 중요하진 않은데 출력 메시지에 관한 내용은 다음에 있음.
https://docs.djangoproject.com/en/3.1/ref/django-admin/#syntax-coloring
django-admin and manage.py | Django documentation | Django
Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate
docs.djangoproject.com