Как получить результаты из задачи celery в react через django rest framework
Я пытаюсь создать задачу celery в рамках django rest framework и вернуть результат во фронтенд react.
Вот мои URL
from .views import ImageViewSet
from rest_framework import routers
from django.urls import path, include
router = routers.DefaultRouter()
router.register(r'analyze', ImageViewSet)
urlpatterns = [
path('', include(router.urls)),
]
Вот мой сериализатор
class ImageViewSet(viewsets.ModelViewSet):
queryset = Test.objects.all()
serializer_class = TestSerializer
def create(self, request, *args, **kwargs):
serializer = TestSerializer(data=request.data)
...some logic
result = test_task.delay(file_path)
return JsonResponse({"task_id": result.id,
"task_status": result.status},
status=status.HTTP_201_CREATED)
def list(self, request, task_id, *args, **kwargs):
task = current_app.AsyncResult(task_id)
response_data = {'task_status': task.status, 'task_id': task.id}
if task.status == 'SUCCESS':
response_data = TestSerializer(Test.objects.get(pk=task.get()))
return Response(response_data.data, status=status.HTTP_201_CREATED)
Я вижу, что функция def create
работает, потому что когда я захожу в админку Django, я нахожу все сохраненным и рассчитанным правильно.
Я думаю, что проблема в def list
или в URL
файлах
На моем фронтенде я имею следующее
getResults= () => {
let formData = new FormData()
formData.append('picture', files[0]., files[0].name)
axios.post("/api/analyze/", formData, {
headers: {
'accept': 'application/json',
'content-type': 'multipart/form-data'
}
})
.then(resp => {
console.log(resp.data)
})
}
Я получаю
{task_id: '8f09fc07-e434-4e8c-88c4-f4d60fb711dd', task_status: 'PENDING'}
Но я не уверен, как обновить эту функцию, чтобы получить результаты, когда сельдерей закончит работу?