网站首页/ 信息中心/ 档案百科/

基于Python构建印刷企业档案培训管理平台

发布时间:2026年08月26日 14:55:04 浏览量:0

一、环境搭建与依赖安装

在开始构建系统之前,我们需要准备Python运行环境。本系统基于Python 3.8及以上版本开发,使用轻量级Web框架Flask进行快速部署。请打开终端(Windows下为CMD或PowerShell,Mac/Linux下为Terminal),依次执行以下命令。

1. 安装Python环境

如果尚未安装Python,请访问 https://www.python.org/downloads/ 下载对应操作系统的安装包。安装时务必勾选 "Add Python to PATH" 选项。安装完成后,通过以下命令验证版本:

```bash python --version ```

2. 创建项目目录并初始化虚拟环境

为了不污染全局环境,我们创建一个独立的文件夹并激活虚拟环境。执行以下命令:

```bash mkdir print_training_system cd print_training_system python -m venv venv ```

3. 激活虚拟环境并安装依赖

根据操作系统不同,激活命令如下。激活后,安装Flask框架:

激活成功后,命令行前缀会出现 (venv) 标识。接着安装Flask:

```bash pip install flask ```

二、项目目录结构规划

为了保证代码清晰易维护,我们需要建立规范的目录结构。请在 print_training_system 根目录下手动创建以下文件夹和文件:

执行以下命令快速生成目录:

```bash mkdir static templates uploads type nul > app.py ```

三、数据库设计与初始化

本系统使用SQLite内置数据库,无需安装额外数据库服务。我们需要设计两张表:users(用于员工登录)和 resources(用于存储档案和培训资料信息)。

app.py 中写入以下完整代码,包含数据库初始化逻辑。该脚本会在首次运行时自动生成 database.db 文件,并预置一个管理员账号(admin/123456)。

```python import sqlite3 import os from flask import Flask, render_template, request, redirect, url_for, session, send_from_directory, flash from werkzeug.utils import secure_filename app = Flask(__name__) app.secret_key = 'print_system_secret_key_change_in_production' app.config['UPLOAD_FOLDER'] = 'uploads' app.config['ALLOWED_EXTENSIONS'] = {'pdf', 'png', 'jpg', 'jpeg', 'mp4', 'docx', 'pptx'} 确保上传目录存在 os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True) def get_db_connection(): conn = sqlite3.connect('database.db') conn.row_factory = sqlite3.Row return conn def init_db(): conn = get_db_connection() 创建用户表 conn.execute(''' CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE NOT NULL, password TEXT NOT NULL, role TEXT NOT NULL ) ''') 创建资源表 conn.execute(''' CREATE TABLE IF NOT EXISTS resources ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, category TEXT NOT NULL, filename TEXT NOT NULL, upload_date TEXT NOT NULL, uploader TEXT NOT NULL ) ''') 初始化管理员账号 (如果不存在) try: conn.execute('INSERT INTO users (username, password, role) VALUES (?, ?, ?)', ('admin', '123456', 'admin')) except sqlite3.IntegrityError: pass 用户已存在 conn.commit() conn.close() 启动时初始化数据库 init_db() ```

四、后端核心逻辑实现

继续在 app.py 中追加以下代码,实现用户认证、文件上传、列表展示和下载功能。这部分代码直接处理HTTP请求,是系统的核心。

```python 辅助函数:检查文件扩展名 def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS'] 1. 登录页面路由 @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['username'] = user['username'] session['role'] = user['role'] return redirect(url_for('dashboard')) else: flash('用户名或密码错误') return render_template('login.html') 2. 主控台页面路由 @app.route('/dashboard') def dashboard(): if 'user_id' not in session: return redirect(url_for('login')) conn = get_db_connection() 获取所有资源,按上传时间倒序排列 resources = conn.execute('SELECT FROM resources ORDER BY upload_date DESC').fetchall() conn.close() return render_template('dashboard.html', resources=resources) 3. 文件上传处理路由 @app.route('/upload', methods=['POST']) def upload_file(): if 'user_id' not in session: return redirect(url_for('login')) if 'file' not in request.files: flash('没有文件部分') return redirect(url_for('dashboard')) file = request.files['file'] title = request.form['title'] category = request.form['category'] 印刷档案 或 培训资料 if file.filename == '': flash('未选择文件') return redirect(url_for('dashboard')) if file and allowed_file(file.filename): filename = secure_filename(file.filename) 处理文件名重复问题 base, ext = os.path.splitext(filename) counter = 1 while os.path.exists(os.path.join(app.config['UPLOAD_FOLDER'], filename)): filename = f"{base}_{counter}{ext}" counter += 1 file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) 记录到数据库 conn = get_db_connection() conn.execute('INSERT INTO resources (title, category, filename, upload_date, uploader) VALUES (?, ?, ?, ?, ?)', (title, category, filename, datetime.now().strftime('%Y-%m-%d %H:%M:%S'), session['username'])) conn.commit() conn.close() flash('文件上传成功') else: flash('不支持的文件类型') return redirect(url_for('dashboard')) 4. 文件下载路由 @app.route('/download/') def download_file(filename): if 'user_id' not in session: return redirect(url_for('login')) return send_from_directory(app.config['UPLOAD_FOLDER'], filename) 5. 注销路由 @app.route('/logout') def logout(): session.clear() return redirect(url_for('login')) if __name__ == '__main__': host='0.0.0.0' 允许局域网访问 app.run(host='0.0.0.0', port=5000, debug=True) ```

五、前端页面模板开发

为了方便操作,我们需要创建三个HTML文件。请在 templates 文件夹下创建 login.htmldashboard.htmlbase.html

1. 创建基础模板 base.html

这个文件包含通用的头部和尾部样式,使用Bootstrap 5 CDN以保证界面美观且无需编写复杂CSS。

```html 印刷档案培训系统
{% with messages = get_flashed_messages() %} {% if messages %} {% for message in messages %}
{{ message }}
{% endfor %} {% endif %} {% endwith %} {% block content %}{% endblock %}
```

2. 创建登录页面 login.html

```html {% extends "base.html" %} {% block content %}
员工登录

基于Python构建印刷企业档案培训管理平台

默认管理员账号: admin / 123456

{% endblock %} ```

3. 创建主控台页面 dashboard.html

```html {% extends "base.html" %} {% block content %}

资料列表

{% for resource in resources %} {% else %} {% endfor %}
ID 标题 分类 上传者 时间 操作
{{ resource.id }} {{ resource.title }} {{ resource.category }} {{ resource.uploader }} {{ resource.upload_date }} 下载
暂无数据
{% endblock %} ```

六、系统启动与局域网访问

代码和页面准备就绪后,即可启动系统。请确保终端仍处于虚拟环境激活状态,且位于项目根目录下。

1. 启动服务

执行以下命令启动Web服务器:

```bash python app.py ```

当终端显示 Running on http://0.0.0.0:5000 时,表示启动成功。

2. 本地访问测试

打开本机浏览器,访问 http://127.0.0.1:5000。使用默认账号 admin / 123456 登录。尝试上传一份PDF格式的印刷工艺单,检查是否能正常显示在列表中并下载。

3. 局域网内其他设备访问

为了让车间或其他部门的电脑能访问此系统,需要获取本机的局域网IP地址。

  • Windows: 在终端输入 ipconfig,找到“IPv4 地址”(例如 192.168.1.105)。
  • Mac/Linux: 在终端输入 ifconfigip a,查看 inet 地址。

假设本机IP为 192.168.1.105,那么连接在同一Wi-Fi或网线下的其他设备,只需在浏览器中输入 http://192.168.1.105:5000 即可访问系统进行档案查阅和培训学习。

七、常见问题与维护指南

1. 上传文件大小限制

Flask默认限制上传文件大小较小。如果需要上传几百兆的视频培训资料,需要在 app.py 配置中添加:

```python app.config['MAX_CONTENT_LENGTH'] = 500 1024 1024 限制为500MB ```

2. 数据备份

所有数据存储在 database.db 文件中,所有上传文件在 uploads 文件夹中。定期只需复制这两个文件/文件夹即可完成完整备份。

3. 增加新员工账号

目前系统未开放注册页面。如需添加新员工,可临时使用Python命令行操作,或直接修改SQLite数据库文件。最简单的方法是在 init_db() 函数中仿照admin的写法添加新用户,然后重启一次服务(注意:重启会重置数据库结构,仅建议在初始化阶段使用)。正式环境建议编写一个简单的 /add_user 路由或使用SQLite管理工具如 DB Browser for SQLite 打开 database.db 手动插入记录。

太原档案数字化服务流程是怎样的?大概需要多少钱?
太原档案数字化服务流程是怎样的?大概需要多少钱?
太原档案数字化服务通常包含需求分析、方案制定、现场整理、扫描加工、数据挂接、验收交付等核心流程,费用根据档案数量、纸张状况、数字化标准等因素综合计算,2026年市场价格范围大致在每页0.5元至2元之间...
2026年08月26日 14:55:04
微信咨询
电话联系
QQ客服
微信咨询一对一服务
服务热线: 028-8744 4417
QQ客服: 2305721818