初始提交:学生信息管理系统源码
基于 Flask + MongoDB 的学生信息增删改查系统 Jinja2 服务端渲染 · Bootstrap 5 管理界面
本项目是一个轻量级的学生信息管理系统,实现学生档案的 录入、查询、修改、删除、查看详情 全流程管理。
采用经典的服务端渲染方案:Flask 提供路由与模板渲染,MongoDB 存储学生文档,Jinja2 模板输出 HTML 页面,Bootstrap 5 负责界面样式。所有交互通过表单提交完成,无需前端构建流程。
配套文档:同目录下的 说明文档(含安装部署说明).docx。
说明文档(含安装部署说明).docx
/
/add
/edit/<student_id>
_id
/view/<student_id>
/delete/<student_id>
列表页特性
name
student_id
$or
per_page = 10
flask-pymongo
PyMongo
bson.objectid.ObjectId
python-dotenv
config.py
venv
学生信息管理系统/ ├── app.py # 主应用:路由、数据校验、错误处理 ├── run.py # 启动脚本(导入 app 后运行) ├── config.py # 分环境配置类(开发 / 生产) ├── models.py # Student 模型(to_dict / from_dict) ├── start.bat # Windows 一键启动 ├── start.sh # Linux / macOS 一键启动 ├── templates/ │ ├── base.html # 基础布局(导航栏 + flash 消息 + 页脚) │ ├── index.html # 学生列表(搜索 + 分页) │ ├── add.html # 添加学生表单 │ ├── edit.html # 编辑学生表单 │ └── view.html # 学生详情 ├── static/ │ └── css/style.css # 自定义样式 ├── venv/ # Python 虚拟环境 └── 说明文档(含安装部署说明).docx
数据库:student_db,集合:students。
student_db
students
gender
男
女
age
major
class_name
email
phone
address
enrollment_date
datetime.now()
文档示例:
{ "_id": ObjectId("..."), "student_id": "2021001", "name": "张三", "gender": "男", "age": 19, "major": "计算机科学", "class_name": "计科2101", "email": "zhang@edu.cn", "phone": "13800001001", "address": "四川省成都市", "enrollment_date": "2026-09-20T10:30:00" }
models.py 中的 Student 类提供了 to_dict() / from_dict() 双向转换方法,可作为对象化操作的封装。
models.py
Student
to_dict()
from_dict()
校验集中在 app.py 的 validate_student(data, is_update=False),所有错误通过 flash 逐条提示并回填表单:
app.py
validate_student(data, is_update=False)
flash
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
^1[3-9]\d{9}$
校验通过后,年龄会被转换为 int 再写入数据库。
int
localhost:27017
项目依赖以下 Python 包:
flask flask-pymongo python-dotenv
注意:start.bat 与 start.sh 都会执行 pip install -r requirements.txt,但当前仓库中 未包含该文件,请先在项目根目录手动创建 requirements.txt,内容如上。
start.bat
start.sh
pip install -r requirements.txt
requirements.txt
Windows
双击 start.bat,脚本会依次:检查 MongoDB 服务(未运行则尝试 net start MongoDB)→ 创建并激活 venv → 安装依赖(清华镜像源)→ 启动应用。
net start MongoDB
Linux / macOS
chmod +x start.sh ./start.sh
脚本会尝试通过 systemctl / service / brew services 启动 MongoDB,随后创建虚拟环境、安装依赖并启动应用。
systemctl
service
brew services
# 1. 启动 MongoDB net start MongoDB # Windows # sudo systemctl start mongod # Linux # 2. 创建并激活虚拟环境 python -m venv venv venv\Scripts\activate # Windows # source venv/bin/activate # Linux / macOS # 3. 安装依赖 pip install flask flask-pymongo python-dotenv # 4. 启动 python app.py # 或 python run.py
启动成功后控制台输出:
✅ MongoDB连接成功!数据库: student_db ================================================== 学生信息管理系统启动成功! 访问地址: http://localhost:5000 ==================================================
访问 http://localhost:5000
服务监听 0.0.0.0:5000,局域网内其他设备也可通过本机 IP 访问。
0.0.0.0:5000
配置分为两处:
1. app.py 中的运行时配置(实际生效)
app.config['SECRET_KEY'] = 'your-secret-key-here-change-in-production' app.config['MONGO_URI'] = 'mongodb://localhost:27017/student_db'
2. config.py 中的分环境配置类(可选项,见第十二节)
Config
SECRET_KEY
MONGO_URI
mongodb://localhost:27017/student_db
DevelopmentConfig
DEBUG = True
ProductionConfig
DEBUG = False
config.py 使用 python-dotenv 的 load_dotenv(),因此可以在项目根目录创建 .env 文件覆盖默认值:
load_dotenv()
.env
SECRET_KEY=你的密钥 MONGO_URI=mongodb://localhost:27017/student_db
1. 启动提示「MongoDB连接失败」 确认 MongoDB 服务已运行(Windows:net start MongoDB),且 27017 端口可访问。
2. start.bat / start.sh 报找不到 requirements.txt 该文件当前未随仓库提供,请按 7.2 节手动创建。
3. 中文乱码 start.bat 已执行 chcp 65001。页面均为 UTF-8 编码,MongoDB 驱动默认以 UTF-8 存储,一般无需额外设置。
chcp 65001
4. 添加学生提示「学号已存在」 student_id 在新增时会做唯一性检查,请更换学号。注意该唯一性并未由数据库索引强制约束,而是应用层校验。
5. 搜索状态下的分页消失 搜索模式下会一次性返回全部匹配结果(total_pages = 1),模板中分页条件为 total_pages > 1 and not keyword,因此不显示分页控件——这是设计行为,非缺陷。
total_pages = 1
total_pages > 1 and not keyword
6. 访问不存在的地址报模板错误 见下方第十二节第 2 条。
base.html
container
© 2026 学生信息管理系统 | 基于 Python Flask + MongoDB
success
danger
static/css/style.css
为避免使用踩坑,以下为本仓库当前的实际状态:
缺失 requirements.txt start.bat、start.sh 均依赖该文件,但仓库中不存在,一键脚本会在此步失败。请按 7.2 节创建。
缺失 404.html / 500.html app.py 中注册了错误处理器:
404.html
500.html
@app.errorhandler(404) def not_found(error): return render_template('404.html'), 404
但 templates/ 目录下并无这两个模板文件,一旦触发 404 或 500,会因 TemplateNotFound 导致错误处理本身再报错。如需启用,请补齐 templates/404.html 与 templates/500.html。
templates/
TemplateNotFound
templates/404.html
templates/500.html
config.py 与 models.py 未被引用 app.py 未 import config 或 from models import Student,而是直接硬编码了 SECRET_KEY 与 MONGO_URI,并在路由中直接操作字典。因此 config.py 的分环境配置与 .env 加载、models.py 的 Student 模型目前属于预留代码,修改它们不会影响运行行为——若要生效,需在 app.py 中接入。
import config
from models import Student
SECRET_KEY 为占位值 app.py 中的 'your-secret-key-here-change-in-production' 仅用于开发,部署前必须替换(可直接改用 config.py 的 SECRET_KEY 环境变量方案)。
'your-secret-key-here-change-in-production'
删除操作为 GET 请求 /delete/<student_id> 使用 GET,且未做 CSRF 防护,存在被预取或诱导触发的风险;生产环境建议改为 POST 并加入 CSRF token。
debug=True 默认开启 app.py 与 run.py 都以调试模式启动,仅适用于开发环境。
debug=True
run.py
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
学生信息管理系统
基于 Flask + MongoDB 的学生信息增删改查系统
Jinja2 服务端渲染 · Bootstrap 5 管理界面
一、项目简介
本项目是一个轻量级的学生信息管理系统,实现学生档案的 录入、查询、修改、删除、查看详情 全流程管理。
采用经典的服务端渲染方案:Flask 提供路由与模板渲染,MongoDB 存储学生文档,Jinja2 模板输出 HTML 页面,Bootstrap 5 负责界面样式。所有交互通过表单提交完成,无需前端构建流程。
配套文档:同目录下的
说明文档(含安装部署说明).docx。二、功能模块
//add/edit/<student_id>_id加载并更新学生信息/view/<student_id>/delete/<student_id>列表页特性
name与student_id做不区分大小写的正则匹配($or组合),搜索状态下不分页,一次性返回全部匹配结果。student_id升序排列,每页 10 条(per_page = 10),页面底部提供上一页 / 页码 / 下一页导航。三、技术栈
flask-pymongo(PyMongo)访问bson.objectid.ObjectIdpython-dotenv(可选,见config.py)venv四、目录结构
五、数据模型
数据库:
student_db,集合:students。_idstudent_idnamegender男/女)agemajorclass_nameemailphoneaddressenrollment_datedatetime.now()自动写入文档示例:
models.py中的Student类提供了to_dict()/from_dict()双向转换方法,可作为对象化操作的封装。六、数据校验规则
校验集中在
app.py的validate_student(data, is_update=False),所有错误通过flash逐条提示并回填表单:男或女^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$^1[3-9]\d{9}$校验通过后,年龄会被转换为
int再写入数据库。七、快速开始
7.1 环境要求
localhost:27017)7.2 依赖安装
项目依赖以下 Python 包:
7.3 方式一:一键启动
Windows
双击
start.bat,脚本会依次:检查 MongoDB 服务(未运行则尝试net start MongoDB)→ 创建并激活venv→ 安装依赖(清华镜像源)→ 启动应用。Linux / macOS
脚本会尝试通过
systemctl/service/brew services启动 MongoDB,随后创建虚拟环境、安装依赖并启动应用。7.4 方式二:手动启动
启动成功后控制台输出:
访问 http://localhost:5000
八、配置说明
配置分为两处:
1.
app.py中的运行时配置(实际生效)2.
config.py中的分环境配置类(可选项,见第十二节)ConfigSECRET_KEY、MONGO_URI,默认mongodb://localhost:27017/student_dbDevelopmentConfigConfig,DEBUG = TrueProductionConfigConfig,DEBUG = Falseconfig.py使用python-dotenv的load_dotenv(),因此可以在项目根目录创建.env文件覆盖默认值:九、使用说明
十、常见问题
1. 启动提示「MongoDB连接失败」 确认 MongoDB 服务已运行(Windows:
net start MongoDB),且 27017 端口可访问。2.
start.bat/start.sh报找不到requirements.txt该文件当前未随仓库提供,请按 7.2 节手动创建。3. 中文乱码
start.bat已执行chcp 65001。页面均为 UTF-8 编码,MongoDB 驱动默认以 UTF-8 存储,一般无需额外设置。4. 添加学生提示「学号已存在」
student_id在新增时会做唯一性检查,请更换学号。注意该唯一性并未由数据库索引强制约束,而是应用层校验。5. 搜索状态下的分页消失 搜索模式下会一次性返回全部匹配结果(
total_pages = 1),模板中分页条件为total_pages > 1 and not keyword,因此不显示分页控件——这是设计行为,非缺陷。6. 访问不存在的地址报模板错误 见下方第十二节第 2 条。
十一、界面说明
base.html:顶部蓝色导航栏(含系统名称与图标)、中间container区域、底部页脚(© 2026 学生信息管理系统 | 基于 Python Flask + MongoDB)。base.html中渲染,按success/danger分类为绿色或红色告警条,可手动关闭。static/css/style.css。十二、已知问题与注意事项
为避免使用踩坑,以下为本仓库当前的实际状态:
缺失
requirements.txtstart.bat、start.sh均依赖该文件,但仓库中不存在,一键脚本会在此步失败。请按 7.2 节创建。缺失
404.html/500.htmlapp.py中注册了错误处理器:但
templates/目录下并无这两个模板文件,一旦触发 404 或 500,会因TemplateNotFound导致错误处理本身再报错。如需启用,请补齐templates/404.html与templates/500.html。config.py与models.py未被引用app.py未import config或from models import Student,而是直接硬编码了SECRET_KEY与MONGO_URI,并在路由中直接操作字典。因此config.py的分环境配置与.env加载、models.py的Student模型目前属于预留代码,修改它们不会影响运行行为——若要生效,需在app.py中接入。SECRET_KEY为占位值app.py中的'your-secret-key-here-change-in-production'仅用于开发,部署前必须替换(可直接改用config.py的SECRET_KEY环境变量方案)。删除操作为 GET 请求
/delete/<student_id>使用 GET,且未做 CSRF 防护,存在被预取或诱导触发的风险;生产环境建议改为 POST 并加入 CSRF token。debug=True默认开启app.py与run.py都以调试模式启动,仅适用于开发环境。十三、说明