我正在使用 Django 实现进度监控功能。但是,我无法在前端获取更新的值。
执行 Django 管理命令popen
以不断更新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 的锁定机制,但不完全明白为什么。有人可以帮我吗?非常感谢~