让 “紫雾凌寒” 来帮你回答,本回答结合 DeepSeek
如果还有问题,请评论或点击头像私信,如果有帮助到您, 请关注、采纳、点赞
- 关键点分析:
- 要实现一个学生信息查询功能,前端需要有输入框用于输入姓名,以及展示查询结果的区域。
- 后端需要接收前端输入的姓名,然后在数据库中查询出同名的学生记录,并将结果返回给前端。
- 涉及到前后端的数据交互,以及数据库的查询操作。 - 解决方案:
- 前端部分(HTML + CSS + JavaScript):
<!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>
<h1>学生信息查询</h1>
<input type="text" id="nameInput" placeholder="请输入姓名">
<button onclick="queryStudent()">查询</button>
<table id="studentTable">
<thead>
<tr>
<th>学号</th>
<th>姓名</th>
<th>班级</th>
<th>电话</th>
<th>地址</th>
<th>邮编</th>
</tr>
</thead>
<tbody></tbody>
</table>
<script>
function queryStudent() {
const name = document.getElementById('nameInput').value;
// 这里使用fetch与后端进行交互
fetch('/query', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ name: name })
})
.then(response => response.json())
.then(data => {
const tableBody = document.getElementById('studentTable').querySelector('tbody');
tableBody.innerHTML = '';
data.forEach(student => {
const row = document.createElement('tr');
row.innerHTML = `
<td>${student.id}</td>
<td>${student.name}</td>
<td>${student.class}</td>
<td>${student.phone}</td>
<td>${student.address}</td>
<td>${student.postcode}</td>
`;
tableBody.appendChild(row);
});
});
}
</script>
</body>
</html>
- **CSS(styles.css)**:
body {
font-family: Arial, sans-serif;
}
h1 {
text-align: center;
}
input,
button {
padding: 10px;
margin: 5px;
}
table {
border-collapse: collapse;
width: 100%;
}
th,
td {
border: 1px solid black;
padding: 8px;
text-align: left;
}
from flask import Flask, request, jsonify
import sqlite3
app = Flask(__name__)
@app.route('/query', methods=['POST'])
def query_student():
data = request.get_json()
name = data.get('name')
conn = sqlite3.connect('students.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM students WHERE name =?', (name,))
students = cursor.fetchall()
student_list = []
for student in students:
student_dict = {
'id': student[0],
'name': student[1],
'class': student[2],
'phone': student[3],
'address': student[4],
'postcode': student[5]
}
student_list.append(student_dict)
conn.close()
return jsonify(student_list)
if __name__ == '__main__':
app.run(debug=True)
- 数据库部分(假设使用SQLite):
- 首先创建一个名为
students.db的数据库文件。 - 然后创建一个名为
students的表:
CREATE TABLE students (
id TEXT PRIMARY KEY,
name TEXT,
class TEXT,
phone TEXT,
address TEXT,
postcode TEXT
);
- 插入一些示例数据:
INSERT INTO students VALUES ('004004', '杨过', 'XX班', '1234567890', 'XX地址', '123456');
- 多种解决方案优缺点:
- 优点:- 前后端分离方案:
- 优点:
- 职责清晰,前端专注于页面展示和交互,后端专注于业务逻辑和数据处理,便于团队协作和代码维护。
- 易于扩展,不同的前端框架(如Vue、React等)可以方便地与后端进行对接。
- 缺点:
- 增加了开发复杂度,需要处理前后端的数据交互和接口设计。
- 可能增加网络请求次数,影响性能,尤其是在数据量较大时。
- 传统的JSP + Servlet方案:
- 优点:
- 开发相对简单,对于初学者来说更容易上手,因为前后端代码在一个项目中,便于调试。
- 减少了网络请求,对于一些简单的应用性能较好。
- 缺点:
- 代码耦合度高,维护困难,不利于大型项目的开发。
- 不利于团队分工协作,因为前后端代码混合在一起。
- 总结:
通过前端的HTML搭建页面结构,CSS进行样式设计,JavaScript实现查询功能和与后端交互;后端使用Flask接收前端请求并查询数据库返回结果;数据库使用SQLite存储学生信息。这种前后端分离的方式使得代码结构清晰,易于维护和扩展,适合构建功能较为复杂的Web应用。
希望以上解答对您有所帮助。如果您有任何疑问,欢迎在评论区提出。