[Django] 서버 시작하자마자 주기적으로 불러온 데이터 DB에 저장하기 (1)

김재연·2022년 3월 24일
0

BEMS 날씨

목록 보기
4/5

호출까지는 됐고.. 디비 저장까지 해야되는데 아까 나온 오류를 해결 못하면 이거 못할거같다...

추측) AppConfig에서는 모델을 사용하는 코드를 못쓴다.
=> 맞았다!!!!

아무래도 서버 시작하자마자 실행되는 코드다 보니 모델을 기존 방식으로는 못쓰는거 같다. 제일 위가 아니라 ready 메소드 안에서 모델을 import해주니까 된다...

from django.apps import AppConfig
from .weather_api import check_weather
from apscheduler.schedulers.background import BackgroundScheduler
import time
from django.shortcuts import render, get_object_or_404

def job():
    print(f'******{time.strftime("%H:%M:%S")}******')
    print("************************")

def cron_weather():
    sched = BackgroundScheduler()
    sched.add_job(job, 'interval', seconds=10, id='cron_weather')
    sched.start()

class WeatherConfig(AppConfig):
    name = 'api'
    verbose_name = "WeatherConfig"
    def ready(self):
        from .models import BemsBuilding, WeatherDB
        building = get_object_or_404(BemsBuilding, pk=1)
        data = check_weather()
        weather = WeatherDB.objects.get(building=building)
        weather.temp = data['tmp']
        weather.humidity = data['hum']
        weather.rainType = data['rain']
        weather.sky = data['sky']
        weather.save()
        print(weather, weather.temp)
        print("weather DB saved")

profile
일기장같은 공부기록📝

0개의 댓글