在Django Admin中使用芹菜(celery)调整图像大小/裁剪图像是一种常见的需求,可以通过以下步骤实现:
- 安装芹菜和相关依赖:在项目的虚拟环境中运行以下命令安装芹菜和Redis(作为消息代理):pip install celery redis
- 配置芹菜:在Django项目的设置文件(settings.py)中添加以下配置:# 使用Redis作为消息代理
CELERY_BROKER_URL = 'redis://localhost:6379/0'
# 将任务结果存储在Redis中
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
- 创建任务:在Django应用的目录中创建一个tasks.py文件,并定义一个任务函数,例如:from celery import shared_task
from PIL import Image
@shared_task
def resize_image(image_path, width, height):
image = Image.open(image_path)
resized_image = image.resize((width, height))
resized_image.save(image_path)
- 在Django Admin中调用任务:在需要调整图像大小/裁剪图像的模型的admin.py文件中,使用以下方式调用任务:from django.contrib import admin
from myapp.models import MyModel
from myapp.tasks import resize_image
class MyModelAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
super().save_model(request, obj, form, change)
# 调用任务来异步处理图像
resize_image.delay(obj.image.path, 800, 600)
admin.site.register(MyModel, MyModelAdmin)
在上述代码中,我们使用了@shared_task
装饰器来定义一个可在Django中使用的任务函数。该任务函数使用PIL库来调整图像的大小,并保存到原始路径。然后,在Django Admin的模型管理类中,我们重写了save_model
方法,在保存模型时异步调用了任务函数resize_image.delay()
,传递了图像路径、目标宽度和高度作为参数。
这样,当在Django Admin中保存模型时,图像将被异步地传递给芹菜任务进行处理,而不会阻塞用户界面。
推荐的腾讯云相关产品:腾讯云容器服务(Tencent Kubernetes Engine,TKE),腾讯云消息队列(Tencent Cloud Message Queue,CMQ),腾讯云对象存储(Tencent Cloud Object Storage,COS)。
腾讯云容器服务(TKE):https://cloud.tencent.com/product/tke
腾讯云消息队列(CMQ):https://cloud.tencent.com/product/cmq
腾讯云对象存储(COS):https://cloud.tencent.com/product/cos