如何在Django Admin中实现异步任务和消息队列

2023-04-11 00:00:00 消息 队列 如何在

在Django Admin中实现异步任务和消息队列通常需要用到两种主要的库:Celery和RabbitMQ。Celery是一个Python异步任务队列/调度程序,而RabbitMQ则是一个消息队列软件。

  1. 安装Celery和RabbitMQ

首先需要安装Celery和RabbitMQ。可以使用下面的命令在虚拟环境中安装它们:

pip install celery
sudo apt-get install rabbitmq-server
  1. 编写异步函数

定义一个异步函数,它将一个字符串作为参数,将字符串打印到控制台上,并将其写入数据库。

from celery import task
from .models import Message

@task
def write_message_to_database(message):
    Message.objects.create(body=message)
    print(message)
  1. 将异步任务添加到消息队列

在Django Admin操作时,可以通过调用异步任务,将它添加到RabbitMQ的消息队列中。需要修改Django Admin视图函数,将异步任务添加到消息队列中:

from django.contrib import admin
from django.shortcuts import render
from .tasks import write_message_to_database

@admin.register(Message)
class MessageAdmin(admin.ModelAdmin):
    list_display = ['body', 'created_on']

    def add_view(self, request, form_url='', extra_context=None):
        if request.method == 'POST':
            message = request.POST.get('message')
            write_message_to_database.delay(message)  # 添加到消息队列中
            return self.response_add(request, obj)
        else:
            return render(request, 'admin/mymodel/add.html', {})
  1. 启动Celery worker

在命令行中启动Celery worker,监视消息队列中的异步任务,并执行它们:

celery -A myproject worker -l info

需要将“A myproject”替换为你的Django项目名。

  1. 启动RabbitMQ

在命令行中启动RabbitMQ:

sudo rabbitmq-server start

现在,当在Django Admin中提交一个消息时,它将被添加到RabbitMQ的消息队列中。Celery工作程序将自动监视该队列,并异步执行该任务。

这就是如何在Django Admin中实现异步任务和消息队列的基本方法。

相关文章