报错分析:Requested setting REST_FRAMEWORK, but settings are not configured.
Django使用APSchedule报错:django.core.exceptions.ImproperlyConfigured: Requested setting REST_FRAMEWORK, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
需求
希望在Django中加一个定时任务,每天定时执行某个函数,从接口中获取最新数据存储起来。
这里尝试用APSchedule,网上有很多教程。
代码
managy.py
from test.app_model.views import Update
scheduler = BackgroundScheduler()
# 时间间隔5秒
scheduler.add_job(Update.test, trigger='interval', seconds=5, id='test')
scheduler.start()
test/app_model/views.py
class Update(MyAPIView):
# 定时的任务,打印当前的时间
def test(self):
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
报错分析
Python不支持py文件相互import/依赖,而Django中app是依赖于manage.py文件的。这里在manage里面又依赖了app,形成了相互依赖。
那能不能不在manage.py里面启动定时器呢?
不能,需求就是希望将线程分开,即使是不启动app,也能定时执行任务,所以需要放在manage.py里
最后换成了django-crontab来完成。
如果有更好的解决办法,欢迎指出~