将Django请求对象传递给芹菜助教

2024-05-17 19:37:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我在tasks.py中有一个任务如下:

@app.task
def location(request):
....

我正试图将请求对象直接从少数几个对象传递到如下任务:

def tag_location(request):
    tasks.location.delay(request)
    return JsonResponse({'response': 1})

我想我得到了一个无法序列化的错误?我该怎么解决?问题是我也有文件上传对象。。并不是所有简单的数据类型。


Tags: 对象pyapptaskreturn序列化responserequest
1条回答
网友
1楼 · 发布于 2024-05-17 19:37:14

因为请求对象包含对不适用于序列化的内容的引用(如上载的文件或与请求关联的套接字),所以没有通用的序列化方法。

取而代之的是,你应该把你需要的那部分拿出来传过去。例如,类似于:

import tempfile

@app.task
def location(user_id, uploaded_file_path):
    # … do stuff …

def tag_location(request):
    with tempfile.NamedTemporaryFile(delete=False) as f:
        for chunk in request.FILES["some_file"].chunks():
            f.write(chunk)
    tasks.location.delay(request.user.id, f.name)
    return JsonResponse({'response': 1})

相关问题 更多 >