环保部门档案培训案例:Python轻量级管理系统搭建实战
一、项目目录结构规划
在开始编写代码之前,必须先建立标准的项目目录结构,以确保文件职责清晰。请在你的电脑上创建一个名为 eco_archive_system 的主文件夹,并在其中按照以下结构创建子文件夹和空文件:
- eco_archive_system/ (项目根目录)
- static/ (存放静态文件)
- uploads/ (存放上传的档案文件,需手动创建)
- templates/ (存放HTML模板)
- index.html (首页列表页)
- upload.html (档案上传页)
- app.py (后端核心逻辑文件)
- schema.sql (数据库初始化脚本)
- archive_db.sqlite (数据库文件,运行后自动生成)
- static/ (存放静态文件)
二、开发环境快速搭建
本系统基于 Python 开发,无需配置复杂的服务器环境。首先确保你的电脑已安装 Python 3.7 或更高版本。打开终端(Windows下为CMD或PowerShell),依次执行以下命令安装必要的依赖库:
1. 安装 Web 框架 Flask:
```bash pip install flask ```2. 安装数据库工具(SQLite 为 Python 内置,无需安装,但若需管理工具可安装 DBBrowser,此处仅依赖 Flask):
环境准备完成后,我们开始构建数据库层。
三、数据库设计与初始化脚本
针对环保部门档案管理的特点,我们需要存储档案标题、所属类别(如:排污许可、危废管理、环保督察等)、上传时间以及物理文件路径。请打开 schema.sql 文件,写入以下完整的 SQL 语句:
```sql DROP TABLE IF EXISTS archives; CREATE TABLE archives ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, category TEXT NOT NULL, filename TEXT NOT NULL, upload_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ```四、后端核心逻辑实现
后端采用 Flask 框架,负责处理文件上传、数据存储及页面路由。请打开 app.py,将以下代码完整复制进去。这段代码包含了数据库连接、文件上传安全处理、表单提交处理及页面渲染的所有逻辑:
```python import os import sqlite3 from flask import Flask, render_template, request, url_for, flash, redirect from werkzeug.utils import secure_filename 配置部分 app = Flask(__name__) app.config['SECRET_KEY'] = 'dev_key_eco_archive' 用于表单加密 app.config['UPLOAD_FOLDER'] = os.path.join('static', 'uploads') 上传目录 app.config['ALLOWED_EXTENSIONS'] = {'pdf', 'doc', 'docx', 'ppt', 'pptx', 'txt', 'jpg', 'png'} app.config['MAX_CONTENT_LENGTH'] = 16 1024 1024 限制上传大小为16MB 确保上传目录存在 os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True) 数据库连接辅助函数 def get_db_connection(): conn = sqlite3.connect('archive_db.sqlite') conn.row_factory = sqlite3.Row return conn 初始化数据库 def init_db(): with app.app_context(): db = get_db_connection() with open('schema.sql', mode='r', encoding='utf-8') as f: db.executescript(f.read()) db.commit() 检查文件扩展名 def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS'] 首页路由:显示档案列表及搜索功能 @app.route('/', methods=['GET', 'POST']) def index(): conn = get_db_connection() query = request.args.get('q', '') if query: 搜索逻辑 archives = conn.execute('SELECT FROM archives WHERE title LIKE ? OR category LIKE ?', ('%' + query + '%', '%' + query + '%')).fetchall() else: 默认显示所有,按时间倒序 archives = conn.execute('SELECT FROM archives ORDER BY upload_date DESC').fetchall() conn.close() return render_template('index.html', archives=archives) 上传页面路由 @app.route('/upload', methods=['GET', 'POST']) def upload(): if request.method == 'POST': 检查是否有文件 if 'file' not in request.files: flash('未选择文件') return redirect(request.url) file = request.files['file'] title = request.form['title'] category = request.form['category'] if file.filename == '': flash('未选择文件') return redirect(request.url) if file and allowed_file(file.filename): filename = secure_filename(file.filename) 安全处理文件名 file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename) file.save(file_path) 保存文件 写入数据库 conn = get_db_connection() conn.execute('INSERT INTO archives (title, category, filename) VALUES (?, ?, ?)', (title, category, filename)) conn.commit() conn.close() flash('档案上传成功!') return redirect(url_for('index')) else: flash('不支持的文件类型') return render_template('upload.html') if __name__ == '__main__': 首次运行时自动初始化数据库 if not os.path.exists('archive_db.sqlite'): init_db() app.run(debug=True, port=5000) ```五、前端页面与交互实现
为了快速构建美观且实用的界面,我们使用原生 HTML 配合 Bootstrap 5(通过 CDN 引入)。请依次创建以下两个 HTML 文件。
1. 创建档案列表页

该页面包含顶部的搜索栏和下方的档案列表表格。请编辑 templates/index.html:
```html| ID | 档案标题 | 所属类别 | 上传时间 | 操作 |
|---|---|---|---|---|
| {{ archive['id'] }} | {{ archive['title'] }} | {{ archive['category'] }} | {{ archive['upload_date'] }} | 下载/预览 |
| 暂无档案数据 | ||||
2. 创建档案上传页
该页面提供表单用于输入档案信息并选择文件。请编辑 templates/upload.html:
```html六、系统运行与操作验证
代码编写完成后,即可进行系统启动和功能验证。
1. 启动服务:
在终端中进入项目根目录 eco_archive_system,执行以下命令启动 Web 服务:
```bash python app.py ```当终端显示 Running on http://127.0.0.1:5000 时,说明服务启动成功。
2. 上传档案测试:
- 打开浏览器访问 http://127.0.0.1:5000/upload。
- 在“档案标题”栏输入:企业突发环境事件风险评估培训。
- 在“所属类别”栏选择:业务培训。
- 点击“选择文件”,从电脑中选择一个 PDF 或 Word 文档。
- 点击“确认上传”按钮。
- 系统成功后会自动跳转回首页,并提示“档案上传成功”。
3. 搜索与查询测试:
- 在首页顶部的搜索框中输入关键词:培训。
- 点击“查询”按钮。
- 下方列表将仅显示标题或类别中包含“培训”字样的档案记录。
- 点击列表右侧的“下载/预览”按钮,可直接在浏览器中打开或下载刚才上传的文件。
至此,一套针对环保部门档案培训管理的轻量级系统已完全落地。该系统支持本地文件存储、分类检索及多格式文件管理,完全满足日常培训档案的数字化归档需求。