为了实现零门槛快速落地,本指南采用 Python 的 Flask 框架作为后端,SQLite 作为数据库。Flask 轻量且易于上手,SQLite 无需安装额外的数据库服务,文件即数据库,非常适合快速构建中小规模的档案面授培训管理系统。
1. 安装 Python 环境
确保你的系统已安装 Python 3.8 或更高版本。打开终端(Windows 下为 CMD 或 PowerShell,Mac 为 Terminal),输入以下命令检查版本:
```bash python --version ```如果未安装,请前往 Python 官网下载对应系统的安装包并安装,安装时务必勾选 "Add Python to PATH"。
2. 安装 Flask 依赖
在终端中执行以下命令,安装 Flask 及相关依赖:
```bash pip install flask ```3. 创建项目目录
在任意位置创建一个名为 archive_training 的文件夹,并在其中创建以下文件结构,保持目录整洁:
```text archive_training/ ├── app.py 主程序入口 ├── init_db.py 数据库初始化脚本 ├── templates/ 存放HTML模板的文件夹 │ ├── base.html 基础布局模板 │ ├── index.html 首页:课程列表 │ ├── add_course.html 添加课程页面 │ └── attendance.html 考勤管理页面 └── training.db 数据库文件(运行后自动生成) ```我们需要设计三张核心表来支撑业务:courses(培训课程)、students(学员档案)、attendance(考勤记录)。请创建 init_db.py 文件,并写入以下完整代码:
```python import sqlite3 def init_db(): conn = sqlite3.connect('training.db') cursor = conn.cursor() 创建课程表 cursor.execute(''' CREATE TABLE IF NOT EXISTS courses ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, instructor TEXT NOT NULL, date TEXT NOT NULL, location TEXT NOT NULL ) ''') 创建学员表 cursor.execute(''' CREATE TABLE IF NOT EXISTS students ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, department TEXT NOT NULL, employee_id TEXT UNIQUE NOT NULL ) ''') 创建考勤表 cursor.execute(''' CREATE TABLE IF NOT EXISTS attendance ( id INTEGER PRIMARY KEY AUTOINCREMENT, course_id INTEGER NOT NULL, student_id INTEGER NOT NULL, status TEXT NOT NULL, FOREIGN KEY (course_id) REFERENCES courses (id), FOREIGN KEY (student_id) REFERENCES students (id) ) ''') conn.commit() conn.close() print("数据库初始化完成,数据库文件已生成:training.db") if __name__ == '__main__': init_db() ```在终端运行 python init_db.py。如果看到“数据库初始化完成”的提示,说明数据库表结构已建立。此时目录下会出现 training.db 文件。
接下来编写 app.py,实现路由控制、数据增删改查及页面渲染。这是系统的核心大脑,包含课程展示、添加、考勤录入等所有逻辑。
```python import sqlite3 from flask import Flask, render_template, request, redirect, url_for, flash app = Flask(__name__) app.secret_key = 'dev_secret_key_for_flash_messages' 用于Flash消息提示 数据库连接辅助函数 def get_db_connection(): conn = sqlite3.connect('training.db') conn.row_factory = sqlite3.Row 允许通过列名访问数据 return conn 首页:展示所有课程 @app.route('/') def index(): conn = get_db_connection() courses = conn.execute('SELECT FROM courses ORDER BY date DESC').fetchall() conn.close() return render_template('index.html', courses=courses) 添加新课程 @app.route('/add_course', methods=('GET', 'POST')) def add_course(): if request.method == 'POST': title = request.form['title'] instructor = request.form['instructor'] date = request.form['date'] location = request.form['location'] if not title: flash('课程标题不能为空!') else: conn = get_db_connection() conn.execute('INSERT INTO courses (title, instructor, date, location) VALUES (?, ?, ?, ?)', (title, instructor, date, location)) conn.commit() conn.close() return redirect(url_for('index')) return render_template('add_course.html') 考勤管理页面 @app.route('/attendance/在 templates 文件夹下创建以下 HTML 文件。我们将使用原生 HTML 结合简单的 Bootstrap 风格(内联 CSS)以保证界面整洁且无需额外下载 CSS 文件。
1. 基础模板 base.html

定义页面的通用头部和底部:
```html2. 首页 index.html
展示课程列表,并提供进入考勤页面的入口:
```html {% extends 'base.html' %} {% block content %}| 课程名称 | 讲师 | 时间 | 地点 | 操作 |
|---|---|---|---|---|
| {{ course['title'] }} | {{ course['instructor'] }} | {{ course['date'] }} | {{ course['location'] }} | 管理考勤 |
暂无课程,请点击右上角发布。
{% endif %} {% endblock %} ```3. 添加课程 add_course.html
```html {% extends 'base.html' %} {% block content %}4. 考勤管理 attendance.html
这是最关键的页面,展示学员列表并提供复选框进行签到操作。为了方便演示,页面底部也加了一个简单的“添加学员”表单:
```html {% extends 'base.html' %} {% block content %}讲师:{{ course['instructor'] }} | 时间:{{ course['date'] }}
所有代码已准备就绪,现在启动系统并进行完整的业务流程测试。
1. 启动服务
在终端确保位于项目根目录,执行:
```bash python app.py ```终端会显示 Running on http://127.0.0.1:5000,表明服务已启动。
2. 测试流程
至此,一个具备课程发布、学员管理及现场考勤功能的档案面授培训管理系统已完全落地。整个系统无需配置复杂的服务器环境,所有数据均存储在本地 training.db 文件中,非常适合部门内部使用或作为技术演示的原型。