小明:嘿,小华,我们学校的宿舍管理系统真的很不错,但我觉得如果能加入一个宿舍清洁度的排行榜就更好了。
小华:嗯,这个主意不错!我们可以利用Python和数据库来实现它。你负责前端展示部分,我来处理后端逻辑。
小明:好的,那我们从哪里开始呢?
小华:首先,我们需要在数据库中添加一个新的表来存储每个宿舍的清洁评分。比如,我们可以创建一个名为'score'的新表,包含'sid'(宿舍ID), 'score_value'(评分)和'timestamp'(评分时间)三个字段。
小华(继续):接下来是后端逻辑。我会使用Python编写一个简单的脚本来定期更新这些分数,并计算每个宿舍的平均分。
import sqlite3
conn = sqlite3.connect('dormitory.db')
c = conn.cursor()
# 创建表
c.execute('''CREATE TABLE IF NOT EXISTS score
(sid TEXT, score_value INTEGER, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP)''')
conn.commit()
conn.close()
]]
小明:听起来不错。然后我需要一个API来获取这些数据,以便前端可以显示出来。
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/scores', methods=['GET'])
def get_scores():
conn = sqlite3.connect('dormitory.db')
c = conn.cursor()
c.execute("SELECT sid, AVG(score_value) as avg_score FROM score GROUP BY sid ORDER BY avg_score DESC")
scores = [{'sid': row[0], 'avg_score': row[1]} for row in c.fetchall()]
conn.close()
return jsonify(scores)
if __name__ == '__main__':
app.run(debug=True)
]]
小明:最后一步,我将使用HTML和JavaScript来展示这些数据。
宿舍清洁度排行榜
axios.get('/scores')
.then(response => {
const scoresDiv = document.getElementById('scores');
response.data.forEach(item => {
scoresDiv.innerHTML += `${item.sid}: ${item.avg_score}`;
});
})
.catch(error => console.error(error));
]]
小华:完美!现在,我们的系统不仅能够记录宿舍的清洁评分,还能实时更新并显示给用户看。