Метод запросов доступа в задаче Celery

Можно ли получить доступ к методам requests.POST/GET внутри задачи celery, которая находится в проекте django? Я читал, что это невозможно, потому что celery не может сериализовать JSON объекты запросов. Кроме как брать данные из объекта requests.POST['data'] и передавать их в задачу celery, есть ли какие-нибудь другие обходные пути?

def index(request):
    task = run_tasks.delay(request) # I would like to pass the request data to the task
    return render(request, 'example/index.html', {'task_id': task.task_id})

Вы можете работать с .urlencode(…) [Django-doc] для преобразования его в строковый объект и обратно:

def index(request):
    run_tasks.delay(data=request.GET.urlencode())
    return render(request, 'example/index.html', {'task_id': task.task_id})

на принимающей стороне, вы можете восстановить QueryDict с помощью:

from django.http import QueryDict

def some_task(data):
    GET = QueryDict(data)
    # work with GET …
    pass
Вернуться на верх