在开始构建档案管理系统之前,必须先准备好标准化的Python开发环境。本系统基于Python 3.8及以上版本开发,利用Flask框架提供Web服务,SQLite作为轻量级数据库存储档案元数据。
在本地创建一个项目目录,并进入该目录:
```bash mkdir archive_system cd archive_system ```为了隔离项目依赖,避免污染全局环境,必须创建虚拟环境。在Windows系统下执行以下命令:
```bash python -m venv venv venv\Scripts\activate ```如果是Linux或macOS系统,执行命令如下:
```bash python3 -m venv venv source venv/bin/activate ```激活虚拟环境后,安装核心依赖包Flask。Flask是一个微框架,非常适合快速构建此类轻量级应用。执行安装命令:
```bash pip install flask ```为了确保后续文件上传功能正常,需要手动创建一个用于存储上传文件的目录。在项目根目录下创建名为uploads的文件夹:
```bash mkdir uploads ```系统采用SQLite数据库,无需安装额外的数据库服务,配置简单且易于迁移。我们需要设计一张表来存储档案的基本信息,包括文件名、存储路径、档案分类以及上传时间。
在项目根目录下创建一个名为init_db.py的文件,并写入以下代码。这段代码将自动生成数据库文件并建立表结构:
```python import sqlite3 def init_db(): 连接到数据库文件,如果不存在会自动创建 conn = sqlite3.connect('archives.db') cursor = conn.cursor() 创建档案表 id: 主键,自增 filename: 原始文件名 filepath: 服务器存储路径 category: 档案分类(如:合同、人事、财务) upload_time: 上传时间戳 cursor.execute(''' CREATE TABLE IF NOT EXISTS archives ( id INTEGER PRIMARY KEY AUTOINCREMENT, filename TEXT NOT NULL, filepath TEXT NOT NULL, category TEXT NOT NULL, upload_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ''') conn.commit() conn.close() print("数据库初始化完成,数据库文件已生成。") if __name__ == '__main__': init_db() ```保存文件后,在终端执行该脚本以完成数据库的初始化:
```bash python init_db.py ```后端是系统的核心,负责处理文件上传、数据存储以及档案查询。我们将所有逻辑封装在app.py文件中。请确保代码中uploads文件夹的路径配置正确,并严格限制上传文件的类型以保障安全。

在项目根目录下创建app.py,并写入以下完整代码:
```python import os import sqlite3 from flask import Flask, render_template, request, redirect, url_for, flash from werkzeug.utils import secure_filename app = Flask(__name__) app.secret_key = 'your_secret_key_here' 用于Flash消息加密,请自行修改复杂字符串 配置文件上传目录 UPLOAD_FOLDER = 'uploads' ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'doc', 'docx', 'xls', 'xlsx'} app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER 确保上传目录存在 if not os.path.exists(UPLOAD_FOLDER): os.makedirs(UPLOAD_FOLDER) def allowed_file(filename): """检查文件扩展名是否合法""" return '.' in filename and \ filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS def get_db_connection(): """获取数据库连接""" conn = sqlite3.connect('archives.db') conn.row_factory = sqlite3.Row 允许通过列名访问数据 return conn @app.route('/') def index(): """首页:展示档案列表""" conn = get_db_connection() 支持按分类筛选 category_filter = request.args.get('category') query = "SELECT FROM archives" params = [] if category_filter: query += " WHERE category = ?" params.append(category_filter) query += " ORDER BY upload_time DESC" archives = conn.execute(query, params).fetchall() conn.close() return render_template('index.html', archives=archives) @app.route('/upload', methods=['GET', 'POST']) def upload_file(): """上传档案页面""" if request.method == 'POST': 检查是否有文件被选中 if 'file' not in request.files: flash('没有文件部分') return redirect(request.url) file = request.files['file'] category = request.form.get('category', '未分类') 如果用户未选择文件,浏览器也会提交一个空的文件名 if file.filename == '': flash('未选择文件') return redirect(request.url) if file and allowed_file(file.filename): 使用secure_filename处理文件名,防止路径遍历攻击 filename = secure_filename(file.filename) filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename) file.save(filepath) 存入数据库 conn = get_db_connection() conn.execute('INSERT INTO archives (filename, filepath, category) VALUES (?, ?, ?)', (filename, filepath, category)) conn.commit() conn.close() flash('档案上传成功!') return redirect(url_for('index')) else: flash('不支持的文件类型') return render_template('upload.html') if __name__ == '__main__': app.run(debug=True, port=5000) ```Flask使用Jinja2模板引擎。为了保持页面整洁,我们需要创建一个templates文件夹,并在其中编写HTML文件。系统包含三个主要视图:基础布局、首页列表和上传表单。
首先创建templates文件夹:
```bash mkdir templates ```在templates目录下创建base.html,这是所有页面的父模板,定义了导航栏和基本样式:
```html接下来创建index.html,用于展示档案列表:
```html {% extends "base.html" %} {% block content %}| ID | 文件名 | 分类 | 上传时间 | 操作 |
|---|---|---|---|---|
| {{ archive.id }} | {{ archive.filename }} | {{ archive.category }} | {{ archive.upload_time }} | 下载/查看 |
| 暂无档案数据 | ||||
最后创建upload.html,提供文件上传表单:
```html {% extends "base.html" %} {% block content %}代码编写完成后,即可启动系统进行测试。确保当前终端处于虚拟环境激活状态,并且位于项目根目录下。
执行以下命令启动Flask开发服务器:
```bash python app.py ```当终端显示 Running on http://127.0.0.1:5000 时,说明服务已成功启动。打开浏览器,访问上述地址。
验证步骤如下:
至此,一个基于Python Flask和SQLite的轻量级档案管理系统已完全搭建完成。该系统具备了基础的文件上传、分类存储、列表展示和筛选功能,可直接用于内部小团队的档案管理培训或演示。