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

Python轻量级文书档案管理系统搭建实操

发布时间:2026年08月17日 13:20:06 浏览量:0

环境准备与项目初始化

本指南将使用Python Flask框架配合SQLite数据库,从零构建一个具备文书录入、分类、检索及下载功能的轻量级档案管理系统。此方案无需配置复杂的服务器环境,适合快速落地。

确保你的系统中已安装Python 3.8或更高版本。打开终端或命令行工具,执行以下命令安装核心依赖Flask:

pip install flask

接着,创建项目目录结构。请在你的工作空间下建立如下文件夹及文件:

数据库设计与初始化

文书档案管理的核心在于对元数据的结构化存储。我们将创建一个名为documents的表,包含文号、题名、责任者、日期、归档类别及文件路径。

打开init_db.py,输入以下完整代码并保存:

```python import sqlite3 def init_db(): conn = sqlite3.connect('archive.db') cursor = conn.cursor() 创建文书档案表 cursor.execute(''' CREATE TABLE IF NOT EXISTS documents ( id INTEGER PRIMARY KEY AUTOINCREMENT, doc_no TEXT NOT NULL, -- 文号 title TEXT NOT NULL, -- 题名 author TEXT, -- 责任者 doc_date DATE, -- 文件日期 category TEXT, -- 归档类别 (如: 行政, 人事, 财务) file_path TEXT, -- 电子文件存储路径 upload_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ''') conn.commit() conn.close() print("数据库初始化完成,数据表 documents 已创建。") if __name__ == '__main__': init_db() ```

在终端中运行该脚本以生成数据库文件:

python init_db.py

后端核心逻辑编写

后端逻辑将处理页面的路由请求、文件上传以及数据库的交互。打开app.py,编写如下代码。请注意配置部分的上传文件夹路径设置。

```python import os import sqlite3 from flask import Flask, render_template, request, redirect, url_for, send_from_directory, flash from werkzeug.utils import secure_filename app = Flask(__name__) app.secret_key = 'secret_key_for_session' 用于Flash消息 app.config['UPLOAD_FOLDER'] = 'uploads' app.config['ALLOWED_EXTENSIONS'] = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'doc', 'docx'} 确保上传目录存在 os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True) 数据库连接辅助函数 def get_db_connection(): conn = sqlite3.connect('archive.db') conn.row_factory = sqlite3.Row return conn 判断文件扩展名是否合法 def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS'] @app.route('/') def index(): conn = get_db_connection() 获取搜索关键词 query = request.args.get('q', '') category_filter = request.args.get('category', '') sql = "SELECT FROM documents WHERE 1=1" params = [] if query: sql += " AND (title LIKE ? OR doc_no LIKE ?)" params.extend([f'%{query}%', f'%{query}%']) if category_filter: sql += " AND category = ?" params.append(category_filter) sql += " ORDER BY upload_time DESC" docs = conn.execute(sql, params).fetchall() conn.close() return render_template('index.html', docs=docs, query=query, category_filter=category_filter) @app.route('/add', methods=['GET', 'POST']) def add_doc(): if request.method == 'POST': doc_no = request.form['doc_no'] title = request.form['title'] author = request.form['author'] doc_date = request.form['doc_date'] category = request.form['category'] file = request.files['file'] file_path = None if file and allowed_file(file.filename): filename = secure_filename(file.filename) 防止文件名冲突,加上时间戳前缀 import time timestamp = str(int(time.time())) filename = f"{timestamp}_{filename}" file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename) file.save(file_path) conn = get_db_connection() conn.execute('INSERT INTO documents (doc_no, title, author, doc_date, category, file_path) VALUES (?, ?, ?, ?, ?, ?)', (doc_no, title, author, doc_date, category, file_path)) conn.commit() conn.close() flash('档案归档成功!') return redirect(url_for('index')) return render_template('add.html') @app.route('/download/

Python轻量级文书档案管理系统搭建实操

') def download_file(filename): return send_from_directory(app.config['UPLOAD_FOLDER'], filename) @app.route('/delete/') def delete_doc(doc_id): conn = get_db_connection() 获取文件路径以便删除物理文件 doc = conn.execute('SELECT file_path FROM documents WHERE id = ?', (doc_id,)).fetchone() if doc and doc['file_path']: if os.path.exists(doc['file_path']): os.remove(doc['file_path']) conn.execute('DELETE FROM documents WHERE id = ?', (doc_id,)) conn.commit() conn.close() flash('档案已删除!') return redirect(url_for('index')) if __name__ == '__main__': app.run(debug=True, port=5000) ```

前端页面与交互实现

为了快速构建界面,我们使用Bootstrap 5 CDN。请在templates文件夹下创建以下三个HTML文件。

基础模板布局 (base.html)

这个文件包含了所有页面共用的头部导航和样式引用。

```html 文书档案管理系统
{% with messages = get_flashed_messages() %} {% if messages %} {% for message in messages %} {% endfor %} {% endif %} {% endwith %} {% block content %}{% endblock %}
```

档案列表与检索页面 (index.html)

这是系统的主页,展示档案列表并提供搜索和筛选功能。

```html {% extends "base.html" %} {% block content %}
{% for doc in docs %} {% else %} {% endfor %}
文号 题名 责任者 日期 类别 附件 操作
{{ doc.doc_no }} {{ doc.title }} {{ doc.author }} {{ doc.doc_date }} {{ doc.category }} {% if doc.file_path %} 下载 {% else %} {% endif %} 删除
暂无符合条件的档案数据
{% endblock %} ```

档案录入表单页面 (add.html)

提供用于录入新档案的表单界面。

```html {% extends "base.html" %} {% block content %}
新增文书档案
支持格式: pdf, doc, docx, jpg, png等
取消
{% endblock %} ```

系统运行与功能测试

代码编写完毕后,即可启动系统进行测试。确保当前终端路径位于项目根目录doc_system下,执行以下命令启动Web服务:

python app.py

启动成功后,终端会显示服务运行地址。打开浏览器,访问 http://127.0.0.1:5000

操作步骤验证:

  1. 录入测试: 点击右上角“归档录入”,填写文号(如“2023-SH-001”)、题名、选择日期和类别,上传一个测试用的PDF或图片文件,点击“保存归档”。系统应自动跳转回首页并提示“档案归档成功”。
  2. 检索测试: 在首页搜索框输入刚才录入的文号或题名关键词,点击查询,列表应准确筛选出对应条目。
  3. 筛选测试: 在下拉菜单中选择特定的类别(如“人事”),列表应仅显示该类别的档案。
  4. 下载测试: 点击列表中的“下载”按钮,浏览器应开始下载之前上传的文件。
  5. 删除测试: 点击“删除”按钮,确认弹窗后,该条目应从列表中消失,且对应的物理文件也会从服务器的uploads文件夹中被移除。

至此,一个具备基础CRUD(增删改查)和文件管理功能的文书档案管理系统已完全搭建完成。你可以根据实际需求,进一步扩展documents表字段(如增加保管期限、密级)或对接FlASK-Login实现用户权限管理。

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