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

档案摘抄制度建设:基于Python的审批系统实操

发布时间:2026年09月02日 11:35:14 浏览量:0

一、环境准备与依赖安装

为了实现档案摘抄制度的数字化落地,我们将使用Python轻量级Web框架Flask配合SQLite数据库。这种方式无需配置复杂的服务器环境,适合快速部署和单机运行。在开始编码前,请确保你的环境中已安装Python 3.8及以上版本。

打开终端或命令行工具,执行以下命令安装必要的依赖库。这里我们使用Flask作为Web框架,Flask-Login用于会话管理,Flask-SQLAlchemy用于数据库操作:

pip install flask flask-sqlalchemy flask-login werkzeug

安装完成后,新建一个项目目录,例如archive_system,并在该目录下创建一个名为app.py的主程序文件。接下来的所有代码都将写入这个文件。

二、系统架构与数据模型设计

档案摘抄制度的核心在于“流程控制”与“责任追溯”。数据库设计必须包含用户管理、申请单流转和操作日志三个维度。我们不使用复杂的ORM关系,而是直接在代码中定义清晰的表结构,确保每一个字段都对应制度中的具体要求。

1. 数据库配置与初始化

app.py的开头,我们先引入必要的库并进行基础配置。我们将使用SQLite数据库,文件名为archive.db,它会自动生成在当前目录下。

```python

from flask import Flask, request, render_template_string, redirect, url_for, flash
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user
from werkzeug.security import generate_password_hash, check_password_hash
from datetime import datetime
import os

app = Flask(__name__)
app.config['SECRET_KEY'] = 'dev-secret-key-change-in-prod'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///archive.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)
login_manager = LoginManager(app)
login_manager.login_view = 'login'
```

2. 用户角色模型设计

制度要求区分“申请人员”与“审批管理人员”。我们需要一个User表来存储身份信息。为了演示方便,我们预留一个is_admin字段来区分权限。

```python

class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
password_hash = db.Column(db.String(128), nullable=False)
is_admin = db.Column(db.Boolean, default=False) True为管理员,False为普通员工
real_name = db.Column(db.String(50), nullable=False) 真实姓名,用于落款

def set_password(self, password):
self.password_hash = generate_password_hash(password)

def check_password(self, password):
return check_password_hash(self.password_hash, password)
```

3. 摘抄申请单模型设计

这是系统的核心数据表,对应《档案摘抄申请表》。字段设计必须涵盖摘抄内容的描述、页数范围、用途以及审批状态。状态字段status将严格控制流程:0代表待审核,1代表已通过,2代表已驳回。

```python

class ArchiveRequest(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
archive_title = db.Column(db.String(200), nullable=False) 档案题名
content_summary = db.Column(db.Text, nullable=False) 摘抄内容摘要
page_range = db.Column(db.String(100), nullable=False) 摘抄页码范围
purpose = db.Column(db.Text, nullable=False) 摘抄用途
apply_time = db.Column(db.DateTime, default=datetime.now) 申请时间
status = db.Column(db.Integer, default=0) 0:待审核, 1:通过, 2:驳回
audit_comment = db.Column(db.Text) 审批意见
auditor_id = db.Column(db.Integer, db.ForeignKey('user.id')) 审批人ID
audit_time = db.Column(db.DateTime) 审批时间
```

4. 操作日志模型设计

为了满足制度建设中的“留痕”要求,任何关键操作(登录、提交申请审批)都必须记录日志,防止责任推诿。

```python

class AuditLog(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, nullable=False)
action = db.Column(db.String(100), nullable=False) 操作类型
detail = db.Column(db.Text) 操作详情
timestamp = db.Column(db.DateTime, default=datetime.now)
```

三、核心代码实现与逻辑封装

在模型定义完成后,我们需要实现具体的业务逻辑。为了确保读者能零门槛运行,我们将HTML模板直接嵌入Python代码中,无需创建额外的模板文件。

1. 基础路由与登录逻辑

系统启动时必须自动创建数据库表,并初始化一个管理员账号(admin/123456)和一个普通员工账号(user/123456)。

```python

档案摘抄制度建设:基于Python的审批系统实操

初始化数据库和默认用户
@app.before_first_request
def create_tables():
db.create_all()
if not User.query.filter_by(username='admin').first():
admin = User(username='admin', real_name='系统管理员', is_admin=True)
admin.set_password('123456')
db.session.add(admin)
user = User(username='user', real_name='张三', is_admin=False)
user.set_password('123456')
db.session.add(user)
db.session.commit()

@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))

@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
user = User.query.filter_by(username=username).first()
if user and user.check_password(password):
login_user(user)
记录登录日志
log = AuditLog(user_id=user.id, action='用户登录', detail=f'用户 {username} 登录系统')
db.session.add(log)
db.session.commit()
return redirect(url_for('index'))
flash('用户名或密码错误')
return render_template_string(LOGIN_HTML)
```

2. 申请提交与审批逻辑

这里包含两个关键接口:/submit用于员工提交摘抄申请,/audit/用于管理员进行审批。在审批逻辑中,我们强制要求填写审批意见,这是制度合规的关键点。

```python

@app.route('/submit', methods=['POST'])
@login_required
def submit_request():
if current_user.is_admin:
flash('管理员无需提交申请')
return redirect(url_for('index'))

new_req = ArchiveRequest(
user_id=current_user.id,
archive_title=request.form['archive_title'],
content_summary=request.form['content_summary'],
page_range=request.form['page_range'],
purpose=request.form['purpose']
)
db.session.add(new_req)
记录提交日志
log = AuditLog(user_id=current_user.id, action='提交申请', detail=f'提交档案: {new_req.archive_title}')
db.session.add(log)
db.session.commit()
flash('申请已提交,等待管理员审核')
return redirect(url_for('index'))

@app.route('/audit/', methods=['POST'])
@login_required
def audit_request(req_id):
if not current_user.is_admin:
flash('无权操作')
return redirect(url_for('index'))

req = ArchiveRequest.query.get_or_404(req_id)
action = request.form.get('action') 'approve' or 'reject'
comment = request.form.get('comment')

if not comment:
flash('审批意见不能为空,请填写合规性说明')
return redirect(url_for('index'))

req.status = 1 if action == 'approve' else 2
req.audit_comment = comment
req.auditor_id = current_user.id
req.audit_time = datetime.now()

记录审批日志
action_text = "通过" if action == "approve" else "驳回"
log = AuditLog(user_id=current_user.id, action='审批操作', detail=f'ID:{req_id} {action_text}, 意见:{comment}')
db.session.add(log)
db.session.commit()
flash('审批完成')
return redirect(url_for('index'))
```

3. 前端页面模板

为了保持单文件结构,我们定义一个包含登录表单、申请列表和操作按钮的HTML字符串。这里使用了Bootstrap的基础样式类(需联网加载CSS,或仅作简单布局)来保证界面可用性。

```python

LAYOUT_HTML = """

档案摘抄管理系统


档案摘抄管理系统
{% with messages = get_flashed_messages() %}
{% if messages %}

{% for message in messages %}{{ message }}
{% endfor %}
{% endif %}
{% endwith %}
{% if current_user.is_authenticated %}

当前用户: {{ current_user.real_name }} ({% if current_user.is_admin %}管理员{% else %}员工{% endif %}) | 退出




{% if not current_user.is_admin %}

提交新摘抄申请



档案题名:

摘抄页码:

内容摘要:

摘抄用途:





{% endif %}

申请记录列表




{% for req in requests %}








{% endfor %}
ID申请人档案题名页码状态操作
{{ req.id }} {{ req.user.real_name }} {{ req.archive_title }} {{ req.page_range }} {% if req.status == 0 %}待审核{% elif req.status == 1 %}已通过{% else %}已驳回{% endif %}
{% if current_user.is_admin and req.status == 0 %}





{% else %}
{{ req.audit_comment or '-' }}
{% endif %}

{% else %}

用户登录



用户名:

密码:



测试账号: 管理员 admin/123456, 员工 user/123456


{% endif %}

"""

LOGIN_HTML = LAYOUT_HTML 复用布局
```

4. 主入口与路由绑定

将主页路由与模板绑定,并添加退出登录功能,启动Flask应用。

```python

@app.route('/')
@login_required
def index():
requests = ArchiveRequest.query.order_by(ArchiveRequest.apply_time.desc()).all()
return render_template_string(LAYOUT_HTML, requests=requests)

@app.route('/logout')
@login_required
def logout():
logout_user()
return redirect(url_for('login'))

if __name__ == '__main__':
app.run(debug=True, port=5000)
```

四、系统启动与验证流程

代码编写完毕后,整个系统已经具备了档案摘抄制度落地的所有核心功能。请按照以下步骤进行验证,确保逻辑无误。

1. 启动服务

在终端中执行以下命令启动Web服务:

python app.py

看到输出 Running on http://127.0 dd0.1:5000/ 即表示启动成功。此时,当前目录下会自动生成archive.db数据库文件,并预置了测试账号。

2. 员工端操作验证(摘抄申请)

3. 管理端操作验证(制度审批)

4. 合规性日志验证

为了验证制度中的“留痕”要求,你可以停止服务(Ctrl+C),然后使用SQLite查看工具或Python脚本查询数据库。你会发现audit_log表中完整记录了从登录、提交到审批的所有操作细节,

商标档案管理系统:别再让商标资产“睡大觉”了!
商标档案管理系统:别再让商标资产“睡大觉”了!
你有没有发现,很多公司花大价钱注册了一堆商标,结果呢?这些商标就像被扔进了仓库角落的旧文件,没人记得、没人维护,甚至快过期了都无人知晓。这事儿吧,说白了就是管理上的一笔“糊涂账”。
2026年09月02日 11:35:14
土木工程建筑业企业档案培训:实用干货全揭秘
土木工程建筑业企业档案培训:实用干货全揭秘
哎,各位土木届的搬砖人、包工头、资料员们,终于挖到个能救咱们半条命的宝贝了——今天要唠的就是跟咱们每天离不开的“工地隐形生命线”有关的【土木工程建筑业企业档案培训】!我可不是啥自媒体瞎忽悠,我是真踩过...
2026年09月02日 11:35:14
微信咨询
电话联系
QQ客服
微信咨询一对一服务
服务热线: 028-8744 4417
QQ客服: 2305721818