칵테일 웹사이트 제작 중 오늘의 추천 칵테일이라는 기능을 구현해야 했다.
즉 24시간 마다 랜덤으로 칵테일 레시피 중 1개를 골라 프론트에 전달해줘야 했다.
매일 정각에 자동으로 구현되는 함수를 제작하기 위해 django-crontab 을 활용하기로 했다.
1. crontab 설치
pip install django-crontab
이후 django의 settings.py 파일로 진입해 INSTALLED_APPS 파일에 'django_crontab'을 추가해주면 된다.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
.
.
.
.
'django_crontab',
]
2. crontab 추가
첫번째로 crontab을 이용해 자동으로 수행할 함수를 작성해야 한다.
나는 cron.py 라는 파일을 따로 만든 후 함수를 작성했다.
# cron.py
from .models import Cocktail,TodayDrink
def todayDrink(): #오늘의 추천 칵테일 crontab 함수
today_drink = Cocktail.objects.order_by("?").first()
last_drink = TodayDrink.objects.all().first()
if last_drink:
last_drink.cocktail = today_drink
last_drink.save()
else:
new_obj = TodayDrink.objects.create(cocktail = today_drink)
new_obj.save()
그리고 다시 settings.py 파일로 진입해 맨 밑에 항목을 추가해준다.
CRONJOBS = [
('*/1 * * * *', 'api.cron.todayDrink')
]
앞의 */1 * * * * 은 시간을 세팅하는 항목이다.
다섯 개의 단위가 있다.
왼쪽부터 순서대로 분, 시, 일, 월, 요일(1-7, 월요일 - 일요일)이다.
*은 매 분, 시, 일, 월, 요일 을 뜻한다. -> ( * * * * *) 은 매 분마다 실행한다는 의미다.
* 대신 숫자를 넣으면 단위에 알맞는 숫자의 시각에 실행한다. -> (5 1 * * *) 매일 1시 5분에 실행한다는 뜻이다.
*/숫자는 간격을 의미한다. -> (*/5 * * * *) 5분마다 1번씩 실행한다는 뜻이다.
뒤에는 아까 설정한 함수가 있는 경로를 입력해주면 된다.
3. crontab 실행
터미널에 진입해 다음과 같은 명령어를 실행하면 된다.
sudo service cron start
python manage.py crontab add
'장고는 못말려' 카테고리의 다른 글
사지방에서 웹 백엔드 공부하기 #5 TestCase를 이용한 test code 작성 (0) | 2023.03.01 |
---|---|
사지방에서 웹 백엔드 공부하기 #4 git, github 관리하기 (0) | 2023.02.27 |
사지방에서 웹 백엔드 공부하기 #2 Django REST API 설계 및 구현 (0) | 2023.02.19 |
사지방에서 웹 백엔드 공부하기 #1 개발환경 설정 (Goorm IDE) (2) | 2023.02.11 |
장고로 REST API 구현하기 - 4 (Serializer 응용) (3) | 2022.07.01 |