怎么在Django中admin添加repeatable job
时间: 2024-09-19 16:17:01 浏览: 40
Python Django给admin添加Action的方法实例详解
在Django中,如果你需要在后台管理系统(Admin)中添加可重复的任务(通常用于执行定时任务),可以借助于Django自带的`django-background-tasks`库或者第三方库如`django-celery-beat`配合`Celery`。下面是基本步骤:
**1. 安装相关库**:
首先,在项目中安装所需的库,如果尚未安装:
```bash
pip install django-background-tasks django-celery[beat]
```
或者仅安装`django-background-tasks`,因为它的功能更为轻量级。
**2. 配置settings.py**:
在`settings.py`中配置Celery,包括设置broker、backend等信息。例如,使用Redis作为消息队列:
```python
CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
```
**3. 添加app到INSTALLED_APPS**:
确保已将包含tasks的app添加到`INSTALLED_APPS`列表中。
**4. 创建任务模型**:
在`tasks/models.py`中创建一个任务模型,继承自`background_task.models.Task`:
```python
from background_tasks import BackgroundTask
class MyTask(BackgroundTask):
pass
```
**5. Admin界面集成**:
在`admin.py`文件中注册你的任务模型,并指定显示在Admin后台:
```python
from django.contrib import admin
from .models import MyTask
admin.site.register(MyTask)
```
现在,你可以在`Admin > App名称 > MyTask`下管理这些任务。用户可以在这里创建新的任务实例,它们会按照你设置的时间间隔自动执行。
**6. 执行任务**:
在你的视图或信号处理函数中,你可以创建并调度任务:
```python
from background_tasks import background
def my_view(request):
task = MyTask()
background.call(task.run_soon, param1=value1) # 调度任务立即运行
return HttpResponse("Task scheduled")
# 或者通过接收信号的方式
@receiver(post_save, sender=MyModel)
def create_task(sender, instance, created, **kwargs):
if created:
background.call(task.run_repeatedly, interval=3600) # 每小时执行一次
```
阅读全文