from django.shortcuts import render from django.urls import reverse_lazy from django.views import View from django.views.generic import FormView from retriever.forms import UploadForm from retriever.models import RetrieverTask, UploadFile, KeywordParagraph, Keywords from .tasks import start_retriever_job # Create your views here. class KeywordRetrieverView(FormView): form_class = UploadForm template_name = "index.html" # Replace with your template. # def get(self, request, *args, **kwargs): # form = FileFieldForm() # return render(request, 'index.html', {'form': form}) def form_valid(self, form): # 创建任务 keyword_list = list(Keywords.objects.filter(is_active=True).values_list('keyword', flat=True)) r_task = RetrieverTask.objects.create(task_keywords=keyword_list) self.task_uuid = r_task.task_uuid # print(r_task.task_keywords) # 将上传的文件保存到数据库 for each in form.cleaned_data['attachments']: UploadFile.objects.create(related_task=r_task, file_name=each.name, file=each) return super(KeywordRetrieverView, self).form_valid(form) def get_success_url(self): # 重写success_url,跳转到任务查看页面 return reverse_lazy('task_viewer', kwargs={'task_uuid': self.task_uuid}) class TaskViewerView(View): def get(self, requests, task_uuid): # print(self.kwargs['task_uuid']) current_task = RetrieverTask.objects.get(task_uuid=task_uuid) # 获取当前任务 if not current_task.task_started: # 如果任务未开始,则调用异步任务 current_task.task_started = True current_task.save() start_retriever_job.delay(current_task.task_uuid) # 调用异步任务 return render(requests, 'task_viewer.html', {'current_task': current_task})