在开始构建档案管理系统之前,必须先准备好Python运行环境。本指南基于Python 3.8及以上版本开发,使用轻量级Web框架Flask。请确保你的操作系统中已经安装了Python。如果没有安装,请访问 https://www.python.org/downloads/ 下载对应系统的安装包,安装时务必勾选 "Add Python to PATH" 选项。
打开终端(Windows下为CMD或PowerShell,Mac/Linux下为Terminal),输入以下命令验证Python是否安装成功:
```bash python --version ```接下来,我们需要创建一个独立的项目目录,并在其中建立一个虚拟环境,以隔离项目依赖。在终端中依次执行以下命令:
```bash 创建项目文件夹 mkdir archive_system cd archive_system 创建虚拟环境 python -m venv venv 激活虚拟环境 Windows系统执行: venv\Scripts\activate Mac或Linux系统执行: source venv/bin/activate ```虚拟环境激活后,命令行前缀会出现 (venv) 标识。此时,安装Flask框架及其依赖:
```bash pip install flask ```为了保持项目结构清晰,请在项目根目录下手动创建以下文件夹结构:
本系统采用SQLite数据库,因为它无需配置单独的数据库服务器,非常适合轻量级档案管理系统的快速落地。我们需要设计一张 archives 表来存储档案信息。
在项目根目录下创建一个名为 schema.sql 的文件,并写入以下内容。这段SQL语句定义了档案表的结构,包含自增ID、档案标题、所属分类、归档日期、存放位置和备注信息。
```sql DROP TABLE IF EXISTS archives; CREATE TABLE archives ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, category TEXT NOT NULL, archive_date DATE NOT NULL, location TEXT, description TEXT ); ```为了方便一键生成数据库文件,我们在根目录下创建 init_db.py。这个脚本负责连接数据库、读取上述SQL文件并执行建表操作。
```python import sqlite3 connection = sqlite3.connect('instance/archive.db') with open('schema.sql') as f: connection.executescript(f.read()) cur = connection.cursor() 预置一条测试数据,方便验证系统是否运行正常 cur.execute("INSERT INTO archives (title, category, archive_date, location, description) VALUES (?, ?, ?, ?, ?)", ('2023年度财务审计报告', '财务', '2023-12-31', 'A区-01架-02层', '包含年度资产负债表及利润表') ) connection.commit() connection.close() ```在终端中执行以下命令初始化数据库。执行成功后,instance 文件夹下将生成 archive.db 文件。
```bash python init_db.py ```后端是系统的核心,负责处理前端发送的请求并与数据库交互。我们在根目录下创建主程序文件 app.py。
在 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('instance/archive.db') conn.row_factory = sqlite3.Row 允许通过列名访问数据 return conn 辅助函数:获取单条档案记录 def get_post(post_id): conn = get_db_connection() post = conn.execute('SELECT FROM archives WHERE id = ?', (post_id,)).fetchone() conn.close() return post ```
继续在 app.py 中添加路由逻辑。我们需要实现首页展示(列表)、创建档案、删除档案这三个核心功能。
```python 路由:首页,显示所有档案列表 @app.route('/') def index(): conn = get_db_connection() 按归档日期降序排列查询 archives = conn.execute('SELECT FROM archives ORDER BY archive_date DESC').fetchall() conn.close() return render_template('index.html', archives=archives) 路由:创建新档案 @app.route('/create', methods=('GET', 'POST')) def create(): if request.method == 'POST': title = request.form['title'] category = request.form['category'] archive_date = request.form['archive_date'] location = request.form['location'] description = request.form['description'] if not title: flash('标题是必填项!') else: conn = get_db_connection() conn.execute('INSERT INTO archives (title, category, archive_date, location, description) VALUES (?, ?, ?, ?, ?)', (title, category, archive_date, location, description)) conn.commit() conn.close() return redirect(url_for('index')) return render_template('create.html') 路由:删除档案 @app.route('/delete/为了使系统具备可视化的操作界面,我们需要编写HTML模板。Flask默认在 templates 文件夹中查找模板文件。
创建 templates/base.html。这是父模板,定义了页面的整体布局,其他页面将继承此模板以保持风格统一。这里包含了简单的导航栏和消息提示区域。
```html创建 templates/index.html。该页面继承自 base.html,主要负责展示档案列表表格。如果数据库中没有数据,会显示提示信息。
```html {% extends 'base.html' %} {% block title %} 档案列表 {% endblock %} {% block header %} 现有档案库 {% endblock %} {% block content %}| ID | 标题 | 分类 | 归档日期 | 存放位置 | 操作 |
|---|---|---|---|---|---|
| {{ archive['id'] }} | {{ archive['title'] }} | {{ archive['category'] }} | {{ archive['archive_date'] }} | {{ archive['location'] }} |
暂无档案记录,请点击右上角新增。
{% endif %} {% endblock %} ```创建 templates/create.html。这是新增档案的表单页面,包含所有必要的输入字段。
```html {% extends 'base.html' %} {% block title %} 新增档案 {% endblock %} {% block header %} 录入新档案 {% endblock %} {% block content %} {% endblock %} ```为了不让界面过于简陋,我们在 static 文件夹下创建 style.css 文件,添加以下样式代码。这将为表格、表单和按钮添加基础的美化效果。
```css body { font-family: sans-serif; margin: 0; padding: 0; background-color: f4f4f4; } nav { background: 333; color: fff; padding: 1rem; display: flex; gap: 1rem; } nav a { color: fff; text-decoration: none; font-weight: bold; } .content { padding: 2rem; max-width: 900px; margin: 0 auto; background: fff; box-shadow: 0 0 10px rgba(0,0,0,0.1); } table { width: 100%; border-collapse: collapse; margin-top: 1rem; } th, td { padding: 0.8rem; border-bottom: 1px solid ddd; text-align: left; } th { background-color: 007bff; color: white; } tr:hover { background-color: f1f1f1; } button { background-color: dc3545; color: white; border: none; padding: 0.5rem 1rem; cursor: pointer; } .form-group { margin-bottom: 1rem; } label { display: block; margin-bottom: 0.5rem; font-weight: bold; } input, select, textarea { width: 100%; padding: 0.5rem; box-sizing: border-box; } button[type="submit"] { background-color: 28a745; width: 100%; padding: 1rem; font-size: 1rem; } .flash { padding: 1rem; background: e2e3e5; color: 383d41; margin-bottom: 1rem; border-left: 5px solid 6c757d; } .tag { background: e9ecef; padding: 2px 6px; border-radius: 4px; font-size: 0.9em; } ```所有代码编写完毕后,即可启动系统进行测试。确保虚拟环境已激活,并在终端中运行以下命令启动Flask开发服务器:
```bash python app.py ```终端会显示服务运行信息,通常是 Running on http://127.0.0.1:5000。打开浏览器,访问该地址。
验证步骤如下:
至此,一个基于Python Flask和SQLite的轻量级档案管理系统已完全搭建完成。该系统具备档案的录入、展示、分类标记及删除功能,完全满足基础的数字化档案管理实操需求。