上一篇
想象一下,你正在开发一个天气应用🌦️,需要每小时从API获取最新天气数据并存入数据库,手动点击"保存"按钮?太原始了!或者你的电商平台🛒需要在每晚12点自动计算当日销售额,这时候,定时任务就是你的救星!
Django作为Python最流行的Web框架之一,虽然没有内置定时任务功能,但通过一些"魔法工具"🪄,我们可以轻松实现自动化数据存储,下面就来手把手教你搞定它!
在虚拟环境中运行:
pip install apscheduler django-apscheduler
打开settings.py
,添加:
INSTALLED_APPS = [ # ...其他应用 'django_apscheduler', ]
Django-apscheduler需要自己的数据表来存储任务信息:
python manage.py migrate
在任意app目录下创建tasks.py
(比如weather/tasks.py
):
from apscheduler.schedulers.background import BackgroundScheduler from django_apscheduler.jobstores import DjangoJobStore from django_apscheduler.models import DjangoJobExecution import requests from .models import WeatherData # 你的数据模型 def fetch_weather(): """模拟获取天气数据并存储""" # 这里替换为真实的API调用 data = { 'temperature': 25.6, 'humidity': 78, 'city': 'Beijing' } # 存入数据库 WeatherData.objects.create(**data) print("🌤️ 天气数据已成功存储!") def start_scheduler(): scheduler = BackgroundScheduler() scheduler.add_jobstore(DjangoJobStore(), "default") # 每小时执行一次 scheduler.add_job( fetch_weather, 'interval', hours=1, id='weather_job', replace_existing=True ) scheduler.start()
在apps.py
中初始化(以weather应用为例):
# weather/apps.py from django.apps import AppConfig class WeatherConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'weather' def ready(self): if not hasattr(self, 'already_started'): from .tasks import start_scheduler start_scheduler() self.already_started = True
确保__init__.py
中设置默认配置:
# weather/__init__.py default_app_config = 'weather.apps.WeatherConfig'
Django-apscheduler会自动在Admin后台添加管理界面:
/admin
Django APScheduler
部分 ![管理后台示意图] (想象这里有个可爱的任务列表截图🖥️)
ready()
方法不会重复执行 settings.py
中正确配置TIME_ZONE
from django_apscheduler.jobstores import DjangoJobStore def update_schedule(hours=2): scheduler = BackgroundScheduler() scheduler.add_jobstore(DjangoJobStore(), "default") scheduler.add_job( fetch_weather, 'interval', hours=hours, # 动态调整间隔 id='weather_job', replace_existing=True )
def delete_old_job_executions(max_age=604_800): """删除一周前的任务记录""" DjangoJobExecution.objects.delete_old_job_executions(max_age)
通过Django-apscheduler,我们实现了:
✅ 每小时自动获取天气数据
✅ 可视化任务管理界面
✅ 灵活的配置和扩展能力
下次当你需要定期备份数据📦、发送日报邮件📧或清理缓存🗑️时,记得这个小技巧哦!
(本文方法测试于2025年8月,各库版本请以实际为准)
本文由 汲思松 于2025-08-02发表在【云服务器提供商】,文中图片由(汲思松)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/517022.html
发表评论