要在 Flask 應(yīng)用中實(shí)現(xiàn)異步加載,可以使用 Spinner 和 AJAX。Spinner 是一個(gè)用于創(chuàng)建和管理異步任務(wù)的庫(kù),而 AJAX 則用于在不重新加載整個(gè)頁(yè)面的情況下從服務(wù)器請(qǐng)求數(shù)據(jù)并更新頁(yè)面內(nèi)容。
以下是如何在 Flask 應(yīng)用中結(jié)合 Spinner 和 AJAX 實(shí)現(xiàn)異步加載的秘訣:
pip install spinner
from flask import Flask, render_template
from spinner import Spinner
app = Flask(__name__)
spinner = Spinner(app)
@app.route('/')
def index():
return render_template('index.html')
@spinner.task()
def my_async_task():
# 這里執(zhí)行你的異步任務(wù)
pass
templates/index.html
):<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Flask Async Loading with Spinner</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<h1>Flask Async Loading with Spinner</h1>
<button id="load-data">Load Data</button>
<div id="data-container"></div>
<script>
$("#load-data").click(function() {
$.ajax({
url: '/load-data',
type: 'GET',
success: function(data) {
$("#data-container").html(data);
}
});
});
</script>
</body>
</html>
@app.route('/load-data')
def load_data():
# 在這里執(zhí)行你的異步任務(wù)并獲取結(jié)果
result = my_async_task()
return result
flask run
現(xiàn)在,當(dāng)用戶(hù)點(diǎn)擊 “Load Data” 按鈕時(shí),將通過(guò) AJAX 發(fā)送請(qǐng)求到 /load-data
路由,執(zhí)行異步任務(wù)并將結(jié)果顯示在頁(yè)面上,而無(wú)需重新加載整個(gè)頁(yè)面。