You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

95 lines
2.6 KiB

from flask import Flask, render_template, request, jsonify, send_file
from services import RollCallService, ScoreService
import io
app = Flask(__name__)
roll_call_service = RollCallService()
score_service = ScoreService()
@app.route('/')
def index():
"""主页面"""
return render_template('index.html')
@app.route('/roll_call')
def roll_call_page():
"""点名页面"""
return render_template('roll_call.html')
@app.route('/scores')
def scores_page():
"""积分页面"""
return render_template('scores.html')
# API接口
@app.route('/api/roll_call/random', methods=['POST'])
def random_roll_call():
"""随机点名API"""
class_name = request.json.get('class_name', '软工K班')
student = roll_call_service.random_roll_call(class_name)
if student:
return jsonify({
'success': True,
'data': student.to_dict()
})
else:
return jsonify({
'success': False,
'message': '没有找到学生'
})
@app.route('/api/scores/update', methods=['POST'])
def update_score():
"""更新积分API"""
data = request.json
student_id = data.get('student_id')
answer_type = data.get('answer_type')
performance = data.get('performance')
success, score_delta = roll_call_service.update_student_score(
student_id, answer_type, performance
)
return jsonify({
'success': success,
'score_delta': score_delta
})
@app.route('/api/scores/ranking')
def get_ranking():
"""获取积分排名API"""
class_name = request.args.get('class_name', '软工K班')
ranking = score_service.get_class_ranking(class_name)
return jsonify({
'success': True,
'data': [student.to_dict() for student in ranking]
})
@app.route('/api/scores/export')
def export_scores():
"""导出积分Excel API"""
class_name = request.args.get('class_name', '软工K班')
excel_data = score_service.export_scores_excel(class_name)
return send_file(
excel_data,
mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
as_attachment=True,
download_name=f'{class_name}_积分统计.xlsx'
)
@app.route('/api/roll_call/history')
def get_roll_call_history():
"""获取点名历史API"""
db = roll_call_service.db
recent_records = db.get_recent_records(10)
return jsonify({
'success': True,
'data': recent_records
})
if __name__ == '__main__':
app.run(debug=True, port=5000)