前置准备
1. 环境准备
确认本地已安装Python 3.8及以上版本,打开命令提示符(Windows)或终端(Mac/Linux),执行python --version查看版本。若未安装,前往https://www.python.org/downloads/下载对应版本,安装时必须勾选“Add Python to PATH”选项,否则后续命令无法使用。执行以下命令安装Flask框架:
```pip install flask```
项目结构搭建
1. 创建目录与文件
在任意磁盘创建名为student_archive的文件夹,在该文件夹下新建4个对象:app.py(Flask主程序)、templates文件夹(存前端页面)、static文件夹(可选,后续优化样式)、student_archive.db(数据库文件,首次运行自动生成)。在templates文件夹下新建index.html,用于存放前端页面代码。
核心代码编写
1. Flask主程序(app.py)
将以下完整代码复制到app.py,所有逻辑专为学籍档案设计,无需修改可直接运行:
```python
from flask import Flask, render_template, request, redirect, url_for
import sqlite3
app = Flask(__name__)
获取数据库连接,支持按字段名访问数据
def get_db():
conn = sqlite3.connect('student_archive.db')
conn.row_factory = sqlite3.Row
return conn
主页路由:处理新增、查询操作
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
读取表单数据
student_id = request.form['student_id'].strip()
name = request.form['name'].strip()
major = request.form['major'].strip()
enroll_date = request.form['enroll_date'].strip()
校验必填项
if not all([student_id, name, major, enroll_date]):
return "所有字段为必填项,返回
首页"
校验学号唯一性
conn = get_db()
exist = conn.execute("SELECT 1 FROM students WHERE student_id = ?", (student_id,)).fetchone()
if exist:
conn.close()
return "学号已存在,返回
首页"
插入档案数据
conn.execute("INSERT INTO students (student_id, name, major, enroll_date) VALUES (?, ?, ?, ?)",
(student_id, name, major, enroll_date))
conn.commit()
conn.close()
return redirect(url_for('index'))
GET请求:查询所有档案并按入学时间倒序排列
conn = get_db()
students = conn.execute("SELECT FROM students ORDER BY enroll_date DESC").fetchall()
conn.close()
return render_template('index.html', students=students)
删除档案路由
@app.route('/delete/
')
def delete(student_id):
conn = get_db()
conn.execute("DELETE FROM students WHERE student_id = ?", (student_id,))
conn.commit()
conn.close()
return redirect(url_for('index'))
首次运行自动创建档案表
def init_db():
conn = get_db()
conn.execute("""
CREATE TABLE IF NOT EXISTS students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
student_id TEXT UNIQUE NOT NULL,
name TEXT NOT NULL,
major TEXT NOT NULL,
enroll_date DATE NOT NULL
)
""")
conn.commit()
conn.close()
if __name__ == '__main__':
init_db() 触发建表逻辑
app.run(debug=True) debug模式自动重载代码,便于调试
```
2. 前端页面(index.html)
将以下代码复制到templates/index.html,包含新增表单与档案列表,无需额外依赖即可正常显示:
```html
学籍档案管理系统
学籍档案管理系统
已建档列表
| 学号 |
姓名 |
专业 |
入学日期 |
操作 |
{% for student in students %}
| {{ student.student_id }} |
{{ student.name }} |
{{ student.major }} |
{{ student.enroll_date }} |
删除 |
{% endfor %}
```
运行与测试
1. 启动系统
进入student_archive文件夹的终端,执行命令:
```flask run```

必须在项目根目录(student_archive文件夹)执行该命令,否则Flask无法识别程序入口。
2. 功能测试
打开浏览器访问http://localhost:5000,完成以下验证:
- 新增档案:输入唯一学号、姓名、专业,选择入学日期,点击“新增档案”,列表会显示新增内容;输入重复学号会触发提示,无法提交
- 删除档案:点击任意档案的“删除”按钮,确认弹窗后该档案会从列表移除,避免误删
核心细节优化
1. 数据备份
系统使用SQLite数据库,核心数据存放在student_archive文件夹的student_archive.db文件中。备份时直接复制该文件即可,无需其他工具;恢复时将备份文件替换原文件,系统会自动加载数据。
2. 格式校验强化
前端表单添加required属性(未填写时无法提交),后端同时校验必填项与学号唯一性,双重校验可确保档案数据的有效性,实际使用时可根据需求添加学号长度、专业格式等校验规则。
3. 问题排查
若启动报错,优先检查:是否在项目根目录执行命令、Python版本是否为3.8+、是否成功安装Flask(重新执行pip install flask);debug模式下浏览器会显示详细错误信息,可快速定位问题。