Python手把手搭建行政单位档案培训系统

技术选型与环境准备

本方案旨在为行政单位构建一套轻量级、无需复杂运维的档案培训系统。考虑到行政单位内网环境及数据敏感性,我们选用Python作为开发语言,配合Flask框架实现Web服务,使用SQLite作为数据库。SQLite具备文件型数据库特性,无需安装数据库服务即可运行,非常适合单机或小规模局域网部署。

第一步:安装Python环境

请确保操作系统已安装Python 3.8或更高版本。打开终端或命令提示符,输入以下命令检查版本:

python --version

若未安装,请前往Python官网下载对应系统的安装包并安装。安装时务必勾选"Add Python to PATH"。

第二步:安装依赖库

在项目根目录下,我们需要安装Flask框架。执行以下命令:

pip install flask

安装完成后,即可开始代码编写。无需配置Web服务器,Flask自带开发服务器足以应对百人级并发访问。

数据库设计与初始化

为了管理档案培训课程及员工学习进度,我们需要设计三张核心表:用户表(users)、课程表(courses)和学习记录表(progress)。

第一步:创建数据库模式文件

在项目目录下创建一个名为schema.sql的文件,并将以下完整的SQL语句复制进去。这将定义我们的数据结构。

-- 用户表:存储员工账号和密码
DROP TABLE IF EXISTS users;
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
password TEXT NOT NULL,
department TEXT NOT NULL,
role TEXT DEFAULT 'staff' -- staff 或 admin
);
-- 课程表:存储档案培训课程信息
DROP TABLE IF EXISTS courses;
CREATE TABLE courses (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
content TEXT NOT NULL, -- 课程内容或视频链接
category TEXT NOT NULL -- 档案分类,如:文书档案、科技档案
);
-- 学习记录表:记录员工的学习状态
DROP TABLE IF EXISTS progress;
CREATE TABLE progress (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
course_id INTEGER NOT NULL,
status TEXT DEFAULT 'not_started', -- not_started, completed
score INTEGER DEFAULT 0,
FOREIGN KEY (user_id) REFERENCES users (id),
FOREIGN KEY (course_id) REFERENCES courses (id)
);

第二步:编写数据库初始化脚本

创建名为init_db.py的文件,用于执行上述SQL并生成training.db数据库文件。

import sqlite3
connection = sqlite3.connect('training.db')
with open('schema.sql') as f:
connection.executescript(f.read())
cur = connection.cursor()
预置一个管理员账号:admin/123456
cur.execute("INSERT INTO users (username, password, department, role) VALUES (?, ?, ?, ?)",
('admin', '123456', '办公室', 'admin')
)
预置两个示例课程
cur.execute("INSERT INTO courses (title, content, category) VALUES (?, ?, ?)",
('机关文书档案管理规范', '本课程讲解文书档案的收集、整理、归档流程...', '文书档案')
)
cur.execute("INSERT INTO courses (title, content, category) VALUES (?, ?, ?)",
('电子档案安全保密指南', '学习涉密电子档案的存储与传输安全要求...', '安全保密')
)
connection.commit()
connection.close()
print("数据库初始化完成,已生成 training.db")

在终端执行python init_db.py。如果执行成功,当前目录下将出现training.db文件。

后端核心逻辑实现

创建主程序文件app.py。我们将实现用户登录、主页展示、课程详情页及学习进度提交的功能。

import sqlite3
from flask import Flask, render_template, request, session, redirect, url_for, flash
app = Flask(__name__)
app.secret_key = 'dev_key_archives_training'   用于Session加密,生产环境请修改为随机字符串
数据库连接辅助函数
def get_db_connection():
conn = sqlite3.connect('training.db')
conn.row_factory = sqlite3.Row   允许通过列名访问数据
return conn
首页/登录页路由
@app.route('/', methods=['GET', 'POST'])
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
conn = get_db_connection()
user = conn.execute('SELECT  FROM users WHERE username = ? AND password = ?', (username, password)).fetchone()
conn.close()
if user:
session['user_id'] = user['id']
session['role'] = user['role']
session['username'] = user['username']
return redirect(url_for('dashboard'))
else:
flash('用户名或密码错误')
return render_template('login.html')
培训仪表盘路由
@app.route('/dashboard')
def dashboard():
if 'user_id' not in session:
return redirect(url_for('login'))
conn = get_db_connection()
获取所有课程
courses = conn.execute('SELECT  FROM courses').fetchall()
获取当前用户的学习进度
progress_rows = conn.execute('SELECT course_id, status FROM progress WHERE user_id = ?', (session['user_id'],)).fetchall()
将进度转换为字典方便前端查找 {course_id: status}
user_progress = {row['course_id']: row['status'] for row in progress_rows}
conn.close()
return render_template('dashboard.html', courses=courses, progress=user_progress)
课程学习页路由
@app.route('/course/')
def course_detail(course_id):
if 'user_id' not in session:
return redirect(url_for('login'))
conn = get_db_connection()
course = conn.execute('SELECT  FROM courses WHERE id = ?', (course_id,)).fetchone()
检查是否已学习
progress = conn.execute('SELECT status FROM progress WHERE user_id = ? AND course_id = ?',
(session['user_id'], course_id)).fetchone()
conn.close()
is_completed = progress['status'] == 'completed' if progress else False
return render_template('course.html', course=course, is_completed=is_completed)
提交学习完成路由
@app.route('/complete/', methods=['POST'])
def complete_course(course_id):
if 'user_id' not in session:
return redirect(url_for('login'))
conn = get_db_connection()
检查是否已有记录,有则更新,无则插入
existing = conn.execute('SELECT id FROM progress WHERE user_id = ? AND course_id = ?',
(session['user_id'], course_id)).fetchone()
if existing:
conn.execute('UPDATE progress SET status = ?, score = 100 WHERE id = ?',
('completed', existing['id']))
else:
conn.execute('INSERT INTO progress (user_id, course_id, status, score) VALUES (?, ?, ?, ?)',
(session['user_id'], course_id, 'completed', 100))
conn.commit()
conn.close()
flash('恭喜!该课程学习已完成。')
return redirect(url_for('dashboard'))
退出登录
@app.route('/logout')
def logout():
session.clear()
return redirect(url_for('login'))
if __name__ == '__main__':
app.run(debug=True, port=5000)

前端页面开发

在项目目录下创建templates文件夹。Flask会自动在此文件夹中寻找HTML文件。我们需要创建三个HTML文件:登录页、仪表盘页和课程详情页。

第一步:创建基础模板(可选,此处为简化直接创建独立页面)

Python手把手搭建行政单位档案培训系统

第二步:创建登录页 templates/login.html





档案培训系统登录



系统登录

{% with messages = get_flashed_messages() %} {% if messages %}

{{ messages[0] }}

{% endif %} {% endwith %}

第三步:创建培训仪表盘 templates/dashboard.html





培训课程中心



行政单位档案培训系统

欢迎, {{ session.username }} | 退出

待培训课程列表

{% with messages = get_flashed_messages() %} {% if messages %}

{{ messages[0] }}

{% endif %} {% endwith %} {% for course in courses %}

{{ course.title }} {{ course.category }}

{{ course.content[:50] }}...

{% if progress.get(course.id) == 'completed' %}

● 已完成培训

{% else %}

○ 未开始

{% endif %}
{% endfor %}

第四步:创建课程详情页 templates/course.html





{{ course.title }}



← 返回课程列表

{{ course.title }}


{{ course.content }}

(此处可扩展嵌入视频播放器或PDF文档阅读器,本示例为纯文本演示)

学习重点:

  • 掌握档案分类的基本原则
  • 熟悉档案借阅审批流程
  • 了解电子档案备份策略
{% if is_completed %} {% else %}
{% endif %}

部署与运行

所有代码已准备就绪,项目结构应如下所示:

项目文件夹/
├── app.py               主程序
├── init_db.py           数据库初始化脚本
├── schema.sql           数据库结构定义
├── training.db          运行init_db.py后生成的数据库文件
└── templates/           模板文件夹
├── login.html
├── dashboard.html
└── course.html

第一步:启动服务

在终端确保位于项目目录下,执行以下命令启动Flask服务器:

python app.py

终端将显示Running on http://127.0.0.1:5000

第二步:访问与测试

  1. 管理员登录:打开浏览器访问 http
AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

扫码咨询
安答联动微信公众号二维码

微信扫码关注安答联动

申请试用
热线电话
申请试用

安答联动档案管理系统