我正在用 django 做一些 python 腳本,當用戶提交檔案時,我處理檔案并執行大量任務,它可以持續幾分鐘。當用戶在等待時,我在 js 中得到了一個加載螢屏,我在控制臺中列印了正在發生的事情。但我想在頁面上列印它,在加載螢屏上,有沒有簡單的方法可以做到這一點?
我的模型看起來像這樣
models.py
def main():
#all the long stuff & logic
我的觀點:
views.py
def upload(request):
#some other stuff
MyModel.main()
return render(request,
'frontend/upload.html',{
'form':form,
}
)
用戶(和我)等待并且不知道發生了什么可能會令人沮喪,我想使用我的頁面,因為我使用帶有列印的控制臺,因為我沒有完成要做的事情而且我猜猜它可能會持續很長時間。
uj5u.com熱心網友回復:
您正在嘗試獲取有關正在運行的任務狀態的資訊。
我會做一個包含令牌、任務名稱和進度列的資料庫表。
該表應包含來自您的主要功能的資訊。
您可以在用戶上傳檔案時向他提供令牌,然后定期從您的 JS 呼叫 django 視圖。
此視圖將根據您提供的令牌回傳當前任務和狀態。
在您的上傳功能中:
def upload():
#some other stuff
token = uuid4.randomUUID()
MyModel.main(token)
return render(request,
'frontend/upload.html',{
'form':form,
'token':token,
}
)
并在您的主要功能中:
def main(token):
current_task = Task.objects.get(id=token)
try:
# some task
current_task.name = "next_operation"
current_task.status = "running"
except:
current_task.status = "failed"
finally:
current_task.save()
這也將提供日志。
然后,當您給它一個令牌時,您必須創建一個回傳任務及其狀態的視圖,并顯示它回傳的任何內容。
提供任務詳細資訊的視圖:
def upload_status_view(request):
token = request.GET.get("token")
if token is None:
return HttpResponse(status=404)
task = Task.objects.get(id=token)
json = '{"task": "' task.name '", "status": "' task.status '"}'
return HttpResponse(status=200, content=json)
在您的前端,您可以使用一些 javascript 來呼叫上傳狀態視圖并更新您的頁面:
while(condition) {
url = "https://myserver.com/task/status?token=MY_TOKEN";
fetch(url).then((response) => {
if(response.status === 200) {
response.json().then((data) => {
document.getElementById("myDiv").innerHTML = data["task"] " : " data["status"];
});
}
else if (response.status === 404) {
document.getElementById("myDiv").innerHTML = "task not found";
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/518171.html
標籤:javascriptPythondjangodjango模型django-views
下一篇:在布林值串列中過濾False
