问题描述
我在我的 django 项目中创建了 celery-progress bar,就像点击一个按钮,进度条在 UI 上启动并且它可以工作。当我转到后一页或下一页并返回进度条页面时,进度开始,它不再显示栏,但芹菜任务仍在后台运行。即使在任务完成之前切换页面后,我也想显示进度条 UI。请建议我实现它。这是我的代码:
views.py
def approval_req_func(request):
task = go_to_sleep.delay(3)
data = {'status': 'Success','message': 'Approved successfully','task_id':task.task_id}
return HttpResponse(json.dumps(data),content_type="application/json")
tasks.py
@app.task(bind=True)
def go_to_sleep(self,duration):
progress_recorder = ProgressRecorder(self)
s = Contact.objects.all()
for i,j in enumerate(s):
time.sleep(duration)
print(j)
progress_recorder.set_progress(i+1,len(s),f'On Iteration {i}')
return 'Done'
Html & Scripts
<button>Click to start Progress</button>
<div class='progress-wrapper'>
<div id='progress-bar' class='progress-bar' style="background-color: #68a9ef; width: 0%;"> </div>
</div>
<div id="progress-bar-message">Waiting for progress to start...</div>
<script>
$(document).ready(function(){
$("button").click(function(event) {
event.preventDefault()
const valuesInArray = $(this).serializeArray()
const body = {}
valuesInArray.forEach(e => {
body[e.name] = e.value
});
$.ajax({
method: "GET",url: "{% url 'contact:approval_req_func' %}",data: body
}).done(function (response) {
$(function () {
var progressUrl = "{% url 'celery_progress:task_status' 'task-id-stub' %}";
var progressUrll = progressUrl.replace('task-id-stub',response['task_id']);
CeleryProgressBar.initProgressBar(progressUrll);
});
})
.fail(function (response) {
console.log(response);
})
});
})
</script>
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)