首页 > Python基础教程 >
-
带你认识 flask 后台作业(5)
...
{% endblock %}
这个函数接受一个任务id
和一个进度值,并使用jQuery为这个任务定位<span>
元素,转换为新进度作为其内容写入。无需验证页面上是否存在该元素,因为如果没有找到该元素,jQuery将不会执行任何操作。
app / tasks.py中的_set_task_progress()
函数每次更新进度时调用add_notification()
,就会产生新的通知。而我在第二十一章明智地以完全通用的方式实现了通知功能。所以当浏览器定期向服务器发送时通知更新请求时,浏览器会获得通过add_notification()
方法添加的任何通知
但是,这些JavaScript代码只能识别具有unread_message_count
名称的那些通知,并忽略其余部分。我现在需要做的是扩展该函数,通过调用我上面定义的set_task_progress()
函数来处理task_progress
通知。以下是处理通知更新版本JavaScript代码:
app / templates / base.html:通知处理器
for (var i = 0; i < notifications.length; i++) {
switch (notifications[i].name) {
case 'unread_message_count':
set_message_count(notifications[i].data);
break;
case 'task_progress':
set_task_progress(
notifications[i].data.task_id,
notifications[i].data.progress);
break;
}
since = notifications[i].timestamp;
}
现在我需要处理两个不同的通知,我决定用一个switch
语句替换检查unread_message_count
通知名称的if
语句,该语句包含我现在需要支持的每个通知。如果你对“ C”系列语言不熟悉,就可能从未见过是switch语句,它提供了一种方便的语法,可以替代一长串的if/elseif
语句。这是一个很棒的特性,因为当我需要支持更多通知时,只需简单地添加case
块即可。
回顾一下,RQ任务附加到task_progress
通知的数据是一个包含两个元素task_id
和progress
的字典,这两个元素是我调用set_task_progress()
的两个参数。
如果您现在运行该应用,则绿色Alert插入的进度指示器将每10秒刷新一次(因为刷新通知的时间间隔是10秒)。
如果您要维护非英语语言文件,则需要使用Flask-Babel刷新翻译文件,然后添加新的翻译:
(venv) $ flask translate update
如果您使用的是编码翻译,那么我已经为你完成了翻译工作,因此可以从下载包中提取app / translations / es / LC_MESSAGES / messages.po文件,从而将其添加到您的项目中。
翻译文件到位后,还要编译翻译文件:
(venv) $ flask translate compile