Browse Source

first commit

master
jc 3 months ago
commit
e96b88d9c7
  1. 34
      app.py
  2. 23
      public/index.html
  3. 38
      public/script.js
  4. 45
      public/styles.css

34
app.py

@ -0,0 +1,34 @@
from flask import Flask, jsonify, send_from_directory
app = Flask(__name__, static_folder="public", static_url_path="")
# 根路径返回 index.html
@app.route("/")
def serve_index():
return send_from_directory(app.static_folder, "index.html")
# API 子路径,提供期末考试复习计划数据
@app.route("/api/review-plan")
def api_review_plan():
review_plan_data = {
"message": "期末考试复习计划",
"data": {
"subjects": [
{"name": "数学", "plan": "每天复习一个章节,做 20 道练习题,重点复习函数和几何部分。"},
{"name": "语文", "plan": "每天阅读一篇文言文,背诵 5 个成语,练习一篇作文。"},
{"name": "英语", "plan": "每天背诵 30 个单词,做一套阅读理解题,练习口语 15 分钟。"},
{"name": "物理", "plan": "每天复习一个物理定律,做 10 道相关习题,总结错题。"},
{"name": "化学", "plan": "每天背诵 5 个化学方程式,做 10 道选择题,复习元素周期表。"}
],
"tips": [
"制定每日复习计划,合理分配时间。",
"保持良好的作息,保证充足的睡眠。",
"复习时保持专注,避免分心。",
"定期进行模拟考试,检验复习效果。"
]
}
}
return jsonify(review_plan_data)
if __name__ == "__main__":
app.run(debug=True, port=80)

23
public/index.html

@ -0,0 +1,23 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>期末考试复习计划</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="container">
<h1>期末考试复习计划</h1>
<div class="section">
<h2>科目复习计划</h2>
<div id="subjects-container"></div>
</div>
<div class="section">
<h2>复习小贴士</h2>
<div id="tips-container"></div>
</div>
</div>
<script src="script.js"></script>
</body>
</html>

38
public/script.js

@ -0,0 +1,38 @@
document.addEventListener("DOMContentLoaded", function () {
fetch("/api/review-plan")
.then(response => response.json())
.then(data => {
const subjectsContainer = document.getElementById("subjects-container");
const tipsContainer = document.getElementById("tips-container");
// 渲染科目复习计划
data.data.subjects.forEach(subject => {
const subjectItem = document.createElement("div");
subjectItem.classList.add("item");
const subjectName = document.createElement("div");
subjectName.classList.add("item-name");
subjectName.textContent = subject.name;
const subjectPlan = document.createElement("div");
subjectPlan.classList.add("item-description");
subjectPlan.textContent = subject.plan;
subjectItem.appendChild(subjectName);
subjectItem.appendChild(subjectPlan);
subjectsContainer.appendChild(subjectItem);
});
// 渲染复习小贴士
data.data.tips.forEach(tip => {
const tipItem = document.createElement("div");
tipItem.classList.add("item");
tipItem.textContent = tip;
tipsContainer.appendChild(tipItem);
});
})
.catch(error => {
console.error("Error fetching review plan data:", error);
});
});

45
public/styles.css

@ -0,0 +1,45 @@
body {
font-family: Arial, sans-serif;
background-color: #f4f4f9;
margin: 0;
padding: 0;
}
.container {
max-width: 800px;
margin: 20px auto;
padding: 20px;
background: #fff;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
}
h1, h2 {
text-align: center;
color: #333;
}
.section {
margin-top: 20px;
}
.item {
margin-bottom: 15px;
padding: 10px;
border-bottom: 1px solid #ddd;
}
.item:last-child {
border-bottom: none;
}
.item-name {
font-size: 1.2em;
font-weight: bold;
color: #444;
}
.item-description {
font-size: 0.9em;
color: #666;
}
Loading…
Cancel
Save