顯示更新時從Flask 視圖串流的資料
簡介
在Flask 應用程式中,通常需要顯示即時產生或更新的資料。雖然 Flask 內建了對串流響應的支持,但將此資料合併到 HTML 模板中可能具有挑戰性。本文探討如何在資料串流傳輸到頁面時動態更新、格式化和顯示資料。
在 Flask 中串流數據
要在 Flask 中串流數據,您需要可以使用生成器作為對路線的回應。每次迭代回應時,生成器都會向客戶端產生一塊資料。例如:
@app.route('/') def index(): def inner(): for i in range(500): # simulate a long process to watch j = math.sqrt(i) time.sleep(1) # this value should be inserted into an HTML template yield str(i) + '<br>\n' return flask.Response(inner(), mimetype='text/html')
此程式碼模擬一個每秒產生值的長時間運行的進程。然後這些值以 HTML 片段的形式串流傳輸到回應。
在 JavaScript 中處理串流資料
雖然 Flask 支援串流回應,但 HTML 範本在伺服器端渲染一次且無法動態更新。要在瀏覽器中處理串流數據,您可以使用 JavaScript 向端點發出請求,並在串流資料到達時進行處理。
一種方法是使用 XMLHttpRequest (XHR) 物件建立一個請求流端點。然後,您可以從回應中讀取數據,直至完成。以下是一個範例:
var xhr = new XMLHttpRequest(); xhr.open('GET', '{{ url_for('stream') }}'); xhr.send(); var position = 0; function handleNewData() { // the response text includes the entire response so far // split the messages, then take the messages that haven't been handled yet // position tracks how many messages have been handled // messages end with a newline, so split will always show one extra empty message at the end var messages = xhr.responseText.split('\n'); messages.slice(position, -1).forEach(function(value) { // Update the displayed data using JavaScript latest.textContent = value; // update the latest value in place // Append the current value to a list to log all output var item = document.createElement('li'); item.textContent = value; output.appendChild(item); }); position = messages.length - 1; } // Check for new data periodically var timer; timer = setInterval(function() { // check the response for new data handleNewData(); // stop checking once the response has ended if (xhr.readyState == XMLHttpRequest.DONE) { clearInterval(timer); latest.textContent = 'Done'; } }, 1000);
此 JavaScript 程式碼使用 XMLHttpRequest 物件建立對流端點的請求。然後它會設定一個計時器來定期檢查新資料並相應地更新頁面。
使用 iframe 進行串流 HTML 輸出
顯示從串流傳輸的資料的另一種方法Flask視圖就是使用iframe。 iframe 是一個單獨的文檔,可用於顯示串流 HTML 輸出。以下是範例:
@app.route('/stream') def stream(): @stream_with_context def generate(): # Serve initial CSS to style the iframe yield render_template_string('<link rel="stylesheet" href="%7B%7B%20url_for(" static filename="stream.css">') # Continuously stream HTML content within the iframe for i in range(500): yield render_template_string('<p>{{ i }}: {{ s }}</p>\n', i=i, s=sqrt(i)) sleep(1) return app.response_class(generate())
<p>This is all the output:</p> <iframe src="%7B%7B%20url_for('stream')%20%7D%7D"></iframe>
此程式碼使用stream_with_context 裝飾器來增強生成器以支援其他功能。它提供初始 CSS 來設定 iframe 的樣式,並在 iframe 中持續串流 HTML 內容。 iframe 中的 HTML 範本可以更複雜,並且可以根據需要包含不同的格式。
以上是如何動態更新和顯示從 Flask 視圖串流的資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Tomergelistsinpython,YouCanusethe操作員,estextMethod,ListComprehension,Oritertools

在Python3中,可以通過多種方法連接兩個列表:1)使用 運算符,適用於小列表,但對大列表效率低;2)使用extend方法,適用於大列表,內存效率高,但會修改原列表;3)使用*運算符,適用於合併多個列表,不修改原列表;4)使用itertools.chain,適用於大數據集,內存效率高。

使用join()方法是Python中從列表連接字符串最有效的方法。 1)使用join()方法高效且易讀。 2)循環使用 運算符對大列表效率低。 3)列表推導式與join()結合適用於需要轉換的場景。 4)reduce()方法適用於其他類型歸約,但對字符串連接效率低。完整句子結束。

pythonexecutionistheprocessoftransformingpypythoncodeintoExecutablestructions.1)InternterPreterReadSthecode,ConvertingTingitIntObyTecode,whepythonvirtualmachine(pvm)theglobalinterpreterpreterpreterpreterlock(gil)the thepythonvirtualmachine(pvm)

Python的關鍵特性包括:1.語法簡潔易懂,適合初學者;2.動態類型系統,提高開發速度;3.豐富的標準庫,支持多種任務;4.強大的社區和生態系統,提供廣泛支持;5.解釋性,適合腳本和快速原型開發;6.多範式支持,適用於各種編程風格。

Python是解釋型語言,但也包含編譯過程。 1)Python代碼先編譯成字節碼。 2)字節碼由Python虛擬機解釋執行。 3)這種混合機制使Python既靈活又高效,但執行速度不如完全編譯型語言。

UseeAforloopWheniteratingOveraseQuenceOrforAspecificnumberoftimes; useAwhiLeLoopWhenconTinuingUntilAcIntiment.forloopsareIdealForkNownsences,而WhileLeleLeleLeleLeleLoopSituationSituationsItuationsItuationSuationSituationswithUndEtermentersitations。

pythonloopscanleadtoerrorslikeinfiniteloops,modifyingListsDuringteritation,逐個偏置,零indexingissues,andnestedloopineflinefficiencies


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SublimeText3漢化版
中文版,非常好用