一、环境准备与项目初始化
为了确保五家渠档案培训数据的本地化存储与高效管理,我们将使用Python轻量级Web框架Flask结合SQLite数据库。这种方式无需配置复杂的数据库服务,适合快速部署和实操演练。
1. 安装基础环境
首先需要在本地电脑上安装Python环境。请打开终端(Windows下为CMD或PowerShell,Mac下为Terminal),输入以下命令检查Python版本,确保已安装Python 3.8及以上版本:
```bash
python --version
```
如果未安装,请直接访问Python官网下载对应系统的安装包并安装。安装完成后,在本地创建一个专门的项目文件夹:
```bash
mkdir wujiaqu_training_system
cd wujiaqu_training_system
```
2. 创建虚拟环境并安装依赖
为了避免项目依赖冲突,强烈建议创建独立的虚拟环境。在项目目录下执行:
```bash
Windows系统
python -m venv venv
Mac或Linux系统
python3 -m venv venv
```
创建成功后,激活虚拟环境。激活后的终端提示符前通常会出现(venv)标识:
```bash
Windows激活命令
venv\Scripts\activate
Mac或Linux激活命令
source venv/bin/activate
```
接下来安装Flask框架。这是本系统的核心依赖,直接使用pip命令安装:
```bash
pip install flask
```
二、数据库结构设计与初始化
我们需要设计一个能够存储培训人员信息、培训内容、考核成绩等核心数据的数据库表。SQLite数据库文件将直接存储在项目根目录下,文件名为training.db。
1. 定义数据库表结构
在项目根目录下创建一个名为schema.sql的文件。这个文件包含了数据库表的创建语句。请复制以下完整代码并粘贴到文件中:
```sql
DROP TABLE IF EXISTS training_records;
CREATE TABLE training_records (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
department TEXT NOT NULL,
training_date TEXT NOT NULL,
subject TEXT NOT NULL,
score INTEGER,
status TEXT DEFAULT '合格'
);
```
字段说明: 该表包含了自增ID、姓名、部门、培训日期、培训科目、考核成绩以及培训状态。这些字段完全覆盖了五家渠档案培训管理的核心需求。
2. 编写数据库初始化脚本
为了方便一键生成数据库,我们编写一个Python脚本来执行上述SQL文件。在项目根目录下创建init_db.py文件,并写入以下代码:
```python
import sqlite3
connection = sqlite3.connect('training.db')
with open('schema.sql') as f:
connection.executescript(f.read())
cur = connection.cursor()
预置一条演示数据,方便验证系统
cur.execute("INSERT INTO training_records (name, department, training_date, subject, score) VALUES (?, ?, ?, ?, ?)",
('张三', '五家渠市档案馆', '2023-10-25', '档案数字化基础实操', '95')
)
connection.commit()
connection.close()
```
保存文件后,在终端执行以下命令生成数据库文件:
```bash
python init_db.py
```
执行后,项目目录下会出现一个training.db文件,且其中已包含一条演示数据。
三、后端核心逻辑开发
后端主要负责处理页面的路由请求以及数据的增删改查操作。我们将创建app.py作为应用程序的入口。
1. 创建应用主文件
在项目根目录下创建app.py。该文件将包含连接数据库、查询列表、添加数据等核心逻辑。以下是完整的代码实现:
```python
import sqlite3
from flask import Flask, render_template, request, url_for, flash, redirect
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key_here' 用于Flash消息加密
数据库连接辅助函数
def get_db_connection():
conn = sqlite3.connect('training.db')
conn.row_factory = sqlite3.Row 允许通过列名访问数据
return conn
获取单条记录
def get_post(post_id):
conn = get_db_connection()
post = conn.execute('SELECT FROM training_records WHERE id = ?', (post_id,)).fetchone()
conn.close()
return post
首页:展示所有培训记录
@app.route('/')
def index():
conn = get_db_connection()
按ID降序排列,最新录入的在最前
training_records = conn.execute('SELECT FROM training_records ORDER BY id DESC').fetchall()
conn.close()
return render_template('index.html', records=training_records)
创建新记录页面
@app.route('/create', methods=('GET', 'POST'))
def create():
if request.method == 'POST':
name = request.form['name']
department = request.form['department']
training_date = request.form['training_date']
subject = request.form['subject']
score = request.form['score']
if not name:
flash('姓名是必填项!')
else:
conn = get_db_connection()
conn.execute('INSERT INTO training_records (name, department, training_date, subject, score) VALUES (?, ?, ?, ?, ?)',
(name, department, training_date, subject, score))
conn.commit()
conn.close()
return redirect(url_for('index'))
return render_template('create.html')
删除记录功能
@app.route('/delete/
')
def delete(id):
post = get_post(id)
conn = get_db_connection()
conn.execute('DELETE FROM training_records WHERE id = ?', (id,))
conn.commit()
conn.close()
flash('"{}" 的培训记录已成功删除'.format(post['name']))
return redirect(url_for('index'))
if __name__ == '__main__':
app.run(debug=True)
```
代码关键点解析: get_db_connection函数确保了每次请求都能正确连接数据库;index路由读取所有数据并传递给前端模板;create路由处理表单提交,将新数据写入数据库。
四、前端页面开发
为了让系统具备良好的交互界面,我们需要创建HTML模板。Flask默认在templates文件夹中查找模板文件。
1. 创建模板目录
在项目根目录下执行以下命令创建文件夹:
```bash
mkdir templates
```
2. 编写基础模板
为了复用HTML头部和导航栏,先创建templates/base.html。这里引入Bootstrap 5 CSS框架以保证界面美观且无需编写复杂CSS:
```html
{% block title %} {% endblock %} - 五家渠档案培训系统
{% with messages = get_flashed_messages() %}
{% if messages %}
{{ messages[0] }}
{% endif %}
{% endwith %}
{% block content %} {% endblock %}
```
3. 编写列表展示页
创建templates/index.html,用于展示所有录入的培训数据。这里使用Bootstrap表格组件进行展示:
```html
{% extends 'base.html' %}
{% block title %} 培训记录列表 {% endblock %}
{% block content %}
五家渠档案培训记录总览
ID
姓名
所属部门
培训日期
培训科目
考核成绩
操作
{% for record in records %}
{{ record['id'] }}
{{ record['name'] }}
{{ record['department'] }}
{{ record['training_date'] }}
{{ record['subject'] }}
{% if record['score'] >= 60 %}
{{ record['score'] }}
{% else %}
{{ record['score'] }}
{% endif %}
删除
{% endfor %}
{% endblock %}
```
4. 编写数据录入页
创建templates/create.html,提供一个表单供工作人员录入新的培训数据:
```html
{% extends 'base.html' %}
{% block title %} 录入新培训 {% endblock %}
{% block content %}
录入新培训记录
{% endblock %}
```
五、系统运行与实操验证
所有代码文件已准备就绪,现在启动系统进行实际操作验证。
1. 启动Web服务
确保终端仍处于虚拟环境激活状态,且位于项目根目录下。执行以下命令启动Flask开发服务器:
```bash
python app.py
```
终端会显示服务已启动的提示信息,通常监听在http://127.0.0.1:5000。
2. 访问与数据录入
打开浏览器,在地址栏输入http://127.0.0.1:5000。你将看到首页展示了一条初始化的演示数据。
步骤一: 点击顶部导航栏的“录入新记录”按钮。
步骤二: 在表单中输入测试数据。姓名填入“李四”,部门填入“101团档案室”,日期选择当天,科目填入“文书档案整理规范”,成绩填入“88”。点击“提交记录”。
步骤三: 系统会自动跳转回首页,此时列表中应已显示“李四”的培训记录,且成绩徽章为绿色(表示合格)。
3. 删除与状态验证
在列表页点击某条记录右侧的红色“删除”按钮。浏览器会弹出确认对话框,确认后该条数据将从数据库中移除,页面自动刷新并显示删除成功的提示消息。
至此,一个针对五家渠档案培训场景的轻量级数字化管理系统已完全搭建完成。该系统实现了数据的持久化存储、列表展示、新增录入及删除管理,完全满足基础培训档案管理的实操需求。