Django_apscheduler的使用
1.安装依赖包
pip install django-apscheduler
2.创建一个新的app
python manage.py startapp test
# 目录结构:纯手打,文件顺序不要在意
djangoproject
settings.py
urls.py
apps
test
models.py
view.py
admin.py
apps.py
manage.py
3.settings.py中注册django-apscheduler和test
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_apscheduler',
'apps.test' # 注意,我这里是在外层包了一个apps的文件夹
]
4.在test文件夹中新建urls.py
# 目录结构:纯手打,文件顺序不要在意
djangoproject
settings.py
urls.py
apps
test
models.py
view.py
admin.py
apps.py
urls.py
manage.py
在urls.py中添加如下代码
from django.urls import path
from apps.test import views
urlpatterns = [
]
打开apps.py,并输入如下代码
from django.apps import AppConfig
class TestConfig(AppConfig):
name = 'apps.test'
5.打开djangoproject中的urls.py,输入如下代码
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('apps.test.urls')),
]
6.执行迁移
python manage.py makemigrations
python manage.py migrate
7.在test文件夹中的view.py中输入下面的代码
from django.shortcuts import render
# Create your views here.
from apscheduler.schedulers.background import BackgroundScheduler
from django_apscheduler.jobstores import DjangoJobStore, register_events, register_job,DjangoResultStoreMixin
# 实例化调度器
scheduler = BackgroundScheduler()
# 开启定时工作
# 调度器使用DjangoJobStore()
scheduler.add_jobstore(DjangoJobStore(), "default")
# 设置定时任务,选择方式为interval,时间间隔为10s
# 另一种方式为每天固定时间执行任务,对应代码为:
# @register_job(scheduler, 'cron', day_of_week='mon-fri', hour='9', minute='30', second='10',id='task_time')
@register_job(scheduler, "interval", seconds=10, replace_existing=True) # replace_existing=解决第二次启动失败的问题
def my_job():
# 这里写你要执行的任务
pass
# register_events(scheduler) 最新的django_apscheduler已经不需要这一步
scheduler.start()
8.重点来了
如果你在完成上述操作后,某一天不小心删除的django默认使用的sqlite或者mysql数据库需要重建,
你又需要执行迁移
那请将第七步view.py 中的代码注释掉,执行迁移。迁移完成在打开注释。
不然,执行迁移时,会失败。