본문 바로가기
Project/pre-print-project

Django 프로젝트 작업 스케줄러로 모델 데이터 삭제하기

by 지식을 쌓는 개구리 2023. 8. 6.

2023 pre-print 개발일지

 

8/6

 

스케줄러 작성 전 장고 프로젝트 세팅

 

=> 사용자 정의 명령을 만들기 위해 프로젝트 앱 내에 다음과 같이 management/commands라는

디렉터리를 생성해 준다.

commands폴더에 작업 스케줄러로 일정 시간마다 실행시키고 싶은 파일을 생성해 준다.

매일 일정시간마다 모델의 데이터를 삭제해야 하므로 "reset_orders"라는 이름으로 작성했다.

 

 모델의 데이터를 삭제하는 코드작성

=> 일정 시간마다 Order와 OrderFile 모델의 데이터를 삭제하는 코드를 아래와 같이 작성해 준다.

from django.core.management.base import BaseCommand
from django.core.files.storage import default_storage
from preprint.models import Order, OrderFile  

class Command(BaseCommand):
    help = 'Reset all orders and files'

    def handle(self, *args, **options):
        orders = Order.objects.all()
       
        for order in orders:
            order_files = OrderFile.objects.filter(order=order)
           
            for order_file in order_files:
                if default_storage.exists(order_file.file.name):
                    default_storage.delete(order_file.file.name)
           
            order.delete()

        self.stdout.write(self.style.SUCCESS('Successfully reset all orders and files.'))

 

작업 스케줄러 설정

1. 작업 만들기

=> 윈도 검색창에서 작업 스케줄러를 검색한 후 실행한다.

작업 스케줄러 라이브러리에서 작업 만들기를 클릭한다.

 

2. 일반 > 작업 이름 작성

=> 다음과 같이 reset_preprint_orders라는 이름을 작성하였다.

아래의 가장 높은 수준의 권한으로 실행을 클릭해 준다.

 

3. 트리거 > 어느 시점에 작동시킬 건지 설정하기

=> 다음과 같이 우리가 작성한 파일을 어느 시점마다 주기 반복 할 것인지 위와 같이 설정한다.

 

 

4. 동작 > 파이썬 경로, 인수 경로, 시작 위치 경로 설정

=> 프로그램/스크립트

프로그램/스크립트 입력창에 python.exe의 경로를 입력해야 한다.

 python.exe의 경로는  아래의 명령어로 확인이 가능하다.

where python

=> 인수 추가

인수 추가 입력창에는 manage.py & 명령어로 설정한 reset_orders 파일을 실행시키기 위한 인수를 작성한다.

장고 프로젝트를 기준으로 manage.py가 있는 경로 + 실행하려는 파일 -> 이와 같이 작성하면 된다.

manage.py가 C:\Users\Owner\Documents\My-Project\pre-print-service\manage.py에 있다면

이 경로를 " " -> 따옴표로 감싸주고 (중요)

 

"C:\Users\Owner\Documents\My-Project\pre-print-service\manage.py" reset_orders

=> 이와 같이 뒤에 실행하려는 해당 파일을 붙여준다.

 

=> 시작 위치

마지막으로 시작위치에는 장고 프로젝트의 manage.py 파일이 위치한 디렉토리 경로를 입력해주면 된다.

 

-manage.py이 위치한 경로- => 장고프로젝트가 있는 폴더 경로

C:\Users\Owner\Documents\My-Project\pre-print-service

=> 이를 시작위치란에 작성해주면 된다. (이 경로는 " "=>따옴표로 감싸주면 안됨)

 

5. 조건

=> 기본 사항으로 컴퓨터의 AC전원이 켜져 있는 경우에만 작업 시작으로 체크되어있기에 

실행되지 않는다면 조건 수정이 필요하다.

 

정상적으로 작동!

 

=> 이와 같이 위에서 설정한 시간이 지난 시점 명령 프롬프트가 깜박거린 후 확인한 결과

정상적으로 데이터베이스의 데이터들이 삭제된 것을 확인할 수 있다!

 

 

 

프로젝트 진행을 하면서 작업 스케줄러를 처음으로 작성해 보았는데 흥미로웠다.

이후 다른 프로젝트에서도 적용할 수 있을 것 같아 조금 더 작업 스케줄러 메커니즘을 공부하고

장고 내의 스케줄러 학습도 기회가 된다면 진행해 봐야겠다.