总的目标是让python程序在收到第一个post请求时,呈现一个html模板,使用JavaScript启动秒表。当python程序收到第二个post请求时,我希望能够及时获取秒表在当前时刻的值。
我本打算使用浏览器的本地存储,但很快意识到,考虑到我将部署到heroku,这不是一个选项。我当前的实现失败,因为每次我返回html模板(或我发送一个新的post请求)时,值都会被重置,并且post请求永远不会发送回我的python脚本(127.0.0.1:5000/test)。
如何在第一次向我的python脚本发出post请求时启动秒表,然后在第二次向我的python脚本发出post请求时获取这些值而不重新启动它?
Python程序-我在这个文件中包含的很少,因为我认为没有必要。请让我知道我是否应该包含更多。
@app.route('/test', methods=['POST'])
def dashboard():
return render_template('dashboard.html')
dashboard.html
<!DOCTYPE html>
<html>
<body>
<div id="stopwatch-container">
<div id="stopwatch">00:00:00</div>
</div>
<script>
var stopwatch = document.getElementById("stopwatch");
var startBtn = document.getElementById("start-btn");
var timeoutId = null;
var ms = 0;
var sec = 0;
var min = 0;
if(ms > 0){
postHook(sec);
} else {
start();
}
function postHook(sec){
object = {
stopwatchValues: sec
}
fetch("https://127.0.0.1:5000/test", { method: 'POST',body: JSON.stringify(object) })
}
/* function to start stopwatch */
function start(count) {
timeoutId = setTimeout(function() {
ms = parseInt(ms);
sec = parseInt(sec);
min = parseInt(min);
console.log(sec)
ms++;
if (ms == 100) {
sec = sec + 1;
ms = 0;
}
if (sec == 60) {
min = min + 1;
sec = 0;
}
if (ms < 10) {
ms = '0' + ms;
}
if (sec < 10) {
sec = '0' + sec;
}
if (min < 10) {
min = '0' + min;
}
if(count == null){
count = 69;
}
stopwatch.innerHTML = min + ':' + sec + ':' + ms + ' | ' + count;
// calling start() function recursivly to continue stopwatch
start();
}, 10); // setTimeout delay time 10 milliseconds
}
</script>
</body>
</html>
1条答案
按热度按时间tez616oj1#
这其实并不像你想的那么复杂;执行过程将沿着以下原则。
1.在服务器中创建2个变量(确保在顶层声明,而不是在控制器函数中声明;请随意重命名):
first_post
(默认值为False
)和first_post_time
,它们将保存服务器接收到第一个请求时的时间戳。1.对于POST请求,检查
first_post
是否为True
。如果不是,将其设置为True
,您就知道这是第一个POST请求。1.(如果这是第一个请求),生成一个(当前)时间戳并将其分配给
first_post_time
,然后像往常一样呈现模板。1.在任何后续的POST请求中,获取当前时间戳并从
first_post_time
中减去它。这是第一个用户的秒表上显示的当前时间。使用该值呈现一个模板,或者对它执行任何您想要的操作。