Как оповестить пользователя о том, что асинхронная задача выполнена? - PullRequest
1 голос
/ 27 мая 2019

Я использую библиотеку потоков для длительных процессов в Django. Когда процесс будет завершен, я хочу продолжать обновлять статус прогресса на внешнем интерфейсе. Я не могу что-либо опубликовать в ajax.get () из своей функции потока.

View.py

def upload_handler(request, file_loc, filename):
    // do something with uploaded
    // I want to notify user that this process is complete via a post
class Uploader(View):
    def get(self, request):
        file=UploadForm()
        return render(request,'template.html',{'form':file}) #,'files':files})
    def post(self, request):
        file = UploadForm(data=request.POST, files=request.FILES)
        if file.is_valid():
            x = request.FILES['file']
            file.save()
            filename = str(request.FILES['file'])
            file_loc = os.path.join(BASE_DIR, 'media', 'images', filename)
            upload_thread = Thread(target=upload_handler, args=(request, file_loc, filename))
            upload_thread.start()
            return HttpResponseRedirect(reverse('imageupload'))

urls.py

urlpatterns = [
    path('', Uploader.as_view(), name='imageupload'),
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

скрипт вызова ajax

{ 
    $.ajax({
      type:"get",
      url:"/uploader",
      datatype:"json",
      success:function(data)
      {
        console.log(data);
        alert("Your file is processed now!");
      }
    });
}, 1000);

Предположим, что загруженная страница файла будет оставаться открытой до завершения длинного процесса.

1 Ответ

0 голосов
/ 27 мая 2019

Тип данных опции AJAX - "json", но представление не возвращает "json".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...