我正在使用Django实现进度监控功能。但是,我无法在前端获得更新的值。
由popen
执行Django管理命令以不断更新webscan
的进度。 Scan是Django模型,progress_info
是模型的属性,保存在数据库中。代码如下:
d = 10
while (d) :
time.sleep(10)
try:
isBusy = server.call("framework.busy?")
logging.debug(isBusy)
if isBusy.strip() == 'true':
progress = webscan.progress
webscan.progress_info = progress
webscan.save()
logging.debug("%s"%progress)
else:
d = 0
except Exception as e:
logging.debug("In an exception when calling busy. Exception: %s and Type %s"%(e, type(e)))
d -= 1
在前端,我进行ajax调用以获取progress_info
的值。处理程序只需获取webscan.progress_info
的值并将其返回到前端。代码如下:
@property
def get_progress(self):
return self.progress_info
使用数据库的GUI,我可以看到progress_info的值保持更新。但是,ajax调用会一直将0
返回到前端,直到命令结束(0是progress_info
的初始值)。
我想这是因为DB或Django的锁定机制,但不完全理解为什么。任何人都可以帮我吗?非常感谢〜