總體目標是有一個 python 程式,在接收到它的第一個post 請求時,它將呈現一個使用 JavaScript 啟動秒表的 html 模板。當 python 程式收到它的第二個post 請求時,我希望能夠在當前時刻獲取秒表的值。
我打算使用瀏覽器的本地存盤,但很快意識到考慮到我將部署到heroku ,這不是一個選擇。我當前的實作失敗了,因為每次我回傳 html 模板(或發送新的發布請求)時,值都會重置,并且發布請求永遠不會發送回我的 python 腳本(127.0.0.1:5000/test)。
如何在我的 python 腳本的第一個 post 請求時啟動秒表,然后在我的 python 腳本的第二個 post 請求時獲取這些值而不重新啟動它?
Python 程式 - 我只包含很少的這個檔案,因為我認為沒有必要。如果我應該包括更多,請告訴我。
@app.route('/test', methods=['POST'])
def dashboard():
return render_template('dashboard.html')
儀表板.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>
uj5u.com熱心網友回復:
這實際上并沒有你想象的那么復雜;實施將遵循...
- 在你的服務器中創建 2 個變數(確保它是在頂層宣告的,而不是在你的控制器函式中;隨意重命名):(
first_post默認為False)和first_post_time,它將保存服務器收到第一個請求的時間戳。 - 在 POST 請求中,檢查是否
first_post為True. 如果沒有,請將其設定為True并且您知道這是第一個發布請求。 - (如果這是第一個請求)在您的服務器上,生成一個(當前)時間戳并將其分配給
first_post_time,然后照常渲染模板。 - 在任何后續 POST 請求中,獲取當前時間戳并將其從
first_post_time. 這是第一個用戶的秒表上顯示的當前時間。使用該值渲染模板或使用它做任何你想做的事情。
注意:此實作在其他客戶端的設備上會有一些延遲,因為最終的 HTTP 請求可能需要一段時間來處理。如果您需要盡可能高的準確性,請分別研究實時客戶端-服務器-客戶端或 p2p 解決方案,如 websockets 或 WebRTC。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/511386.html
