44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
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")
|