从零搭建可直接落地的合同档案管理系统 零门槛手把手实操指南

一、前期环境准备

本系统基于Python+Flask+SQLite开发,不需要复杂的服务器环境,个人本地/小团队局域网都可以用,仅需2步完成环境准备:

  • 安装Python3.8及以上版本,直接从官方地址下载:https://www.python.org/downloads/,安装时必须勾选 Add Python to PATH,安装完成后打开命令提示符输入python --version,输出版本号即安装成功。
  • 安装依赖库,打开命令提示符直接执行以下命令:
    ```
    pip install flask sqlalchemy
    ```
    
    如果提示网络超时,换成国内镜像命令:
    ```
    pip install flask sqlalchemy -i https://pypi.tuna.tsinghua.edu.cn/simple
    ```
    

二、项目创建与完整代码

按以下步骤创建项目结构,全程不需要额外编写代码,直接复制即可:

  1. 在电脑任意位置新建名为contract_manage的项目文件夹
  2. 进入项目文件夹,新建名为instance的空文件夹,用来存放数据库文件
  3. 在项目根目录新建名为app.py的文件,将以下完整代码复制进去:

从零搭建可直接落地的合同档案管理系统 零门槛手把手实操指南

```
from flask import Flask, render_template_string, request, send_file, redirect, url_for
from sqlalchemy import create_engine, Column, Integer, String, Date
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
import os
from datetime import datetime
app = Flask(__name__)
配置数据库路径
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
DATABASE_PATH = os.path.join(BASE_DIR, 'instance', 'contract.db')
engine = create_engine(f'sqlite:///{DATABASE_PATH}', echo=False)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
配置上传文件夹
UPLOAD_FOLDER = os.path.join(BASE_DIR, 'uploads')
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
合同数据模型
class Contract(Base):
__tablename__ = 'contracts'
id = Column(Integer, primary_key=True, index=True)
contract_no = Column(String(50), unique=True, index=True, nullable=False)
contract_name = Column(String(100), nullable=False)
contract_type = Column(String(50), nullable=False)
sign_date = Column(Date, nullable=False)
party_a = Column(String(100))
party_b = Column(String(100))
file_path = Column(String(200), nullable=False)
自动创建数据库表
Base.metadata.create_all(bind=engine)
页面模板
HTML_TEMPLATE = '''




合同档案管理系统



合同档案管理系统

新增合同档案

合同档案列表

{% for c in contracts %} {% endfor %}
合同编号 名称 类型 签订日期 甲方 乙方 操作
{{c.contract_no}} {{c.contract_name}} {{c.contract_type}} {{c.sign_date}} {{c.party_a}} {{c.party_b}} 下载 删除
''' 首页展示列表 @app.route('/') def index(): db = SessionLocal() contracts = db.query(Contract).order_by(Contract.sign_date.desc()).all() db.close() return render_template_string(HTML_TEMPLATE, contracts=contracts) 新增合同接口 @app.route('/add', methods=['POST']) def add(): contract_no = request.form.get('contract_no') contract_name = request.form.get('contract_name') contract_type = request.form.get('contract_type') sign_date = datetime.strptime(request.form.get('sign_date'), '%Y-%m-%d').date() party_a = request.form.get('party_a') party_b = request.form.get('party_b') file = request.files['contract_file'] filename = f"{datetime.now().strftime('%Y%m%d%H%M%S')}_{file.filename}" save_path = os.path.join(UPLOAD_FOLDER, filename) file.save(save_path) db = SessionLocal() new_contract = Contract( contract_no=contract_no, contract_name=contract_name, contract_type=contract_type, sign_date=sign_date, party_a=party_a, party_b=party_b, file_path=save_path ) db.add(new_contract) db.commit() db.close() return redirect(url_for('index')) 下载合同文件 @app.route('/download/') def download(contract_id): db = SessionLocal() contract = db.query(Contract).filter_by(id=contract_id).first() db.close() return send_file(contract.file_path, as_attachment=True) 删除合同档案 @app.route('/delete/') def delete(contract_id): db = SessionLocal() contract = db.query(Contract).filter_by(id=contract_id).first() if os.path.exists(contract.file_path): os.remove(contract.file_path) db.delete(contract) db.commit() db.close() return redirect(url_for('index')) if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=5000) ```

三、启动使用操作

完成代码配置后,按以下步骤启动:

  1. 打开命令提示符,输入命令进入项目文件夹,示例:如果项目放在D盘根目录,命令为cd D:\contract_manage
  2. 输入启动命令:python app.py
  3. 终端输出 Running on http://127.0.0.1:5000即启动成功
  4. 打开浏览器,输入地址 http://127.0.0.1:5000 即可进入系统使用

如果需要局域网内同事访问,只需查询你电脑的内网IP,比如IP为192.168.1.100,同事访问http://192.168.1.100:5000 即可使用。

四、数据备份与常见问题

数据备份方法

本系统所有数据分为两部分:合同基础信息存在instance/contract.db,合同原文件存在uploads文件夹,备份只需将这两个文件/文件夹复制到其他存储位置即可,恢复时直接替换对应位置即可。

常见问题解决

  • 输入python提示命令不存在:重新运行Python安装程序,选择修改选项,勾选Add Python to PATH后保存即可。
  • 端口被占用无法启动:打开app.py,将最后一行的port=5000修改为port=5001或其他未占用端口,重启服务即可。
  • 新增合同后无法下载:不需要特殊处理,不要移动项目文件夹位置即可,若要转移项目,整体复制文件夹即可。
AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

扫码咨询
安答联动微信公众号二维码

微信扫码关注安答联动

申请试用
热线电话
申请试用

安答联动档案管理系统