from django.contrib import messages from django.shortcuts import get_object_or_404, redirect, render from django.views.decorators.http import require_POST from apps.scenarios.services import list_scenarios from .forms import DocumentUploadForm from .models import UploadedDocument from .services import create_uploaded_document, index_document def document_list(request): # 列表页只负责展示文档元数据和可执行操作,不处理入库细节。 documents = UploadedDocument.objects.all() return render(request, "documents/document_list.html", {"documents": documents}) def upload(request): # 上传成功后仅保存文件和元数据,是否入库由用户显式触发。 if request.method == "POST": form = DocumentUploadForm(request.POST, request.FILES) if form.is_valid(): create_uploaded_document(form.cleaned_data["scenario_id"], form.cleaned_data["file"]) messages.success(request, "文件已上传,可继续执行入库。") return redirect("documents:list") else: form = DocumentUploadForm() return render( request, "documents/upload.html", {"form": form, "scenarios": list_scenarios()}, ) @require_POST def index(request, document_id: int): document = get_object_or_404(UploadedDocument, pk=document_id) document = index_document(document) if document.status == UploadedDocument.STATUS_INDEXED: messages.success(request, "文档入库成功,当前文档已可参与检索。") else: messages.error(request, "文档入库失败,请检查错误原因后重试。") return redirect("documents:list")