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

从零搭建可商用落地的商标注册档案管理系统实操指南

发布时间:2026年08月20日 05:20:01 浏览量:0

前期环境准备

本文采用轻量开源技术栈搭建,不需要复杂后端基础,跟着步骤操作就能直接落地,你只需要完成两步环境配置:

1. 安装Python

直接从Python官方下载对应系统安装包:https://www.python.org/downloads/,安装过程中必须勾选「Add Python to PATH」选项,否则后续命令无法执行。安装完成后打开命令提示符输入python --version,输出版本号即安装成功。

2. 安装项目依赖

打开命令提示符,直接执行以下命令完成依赖安装:

``` pip install flask flask-sqlalchemy openpyxl ```

国内网络下载慢可添加清华镜像,执行:pip install flask flask-sqlalchemy openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple

项目结构搭建

整个项目只有4个核心文件,你可以手动创建以下文件和文件夹,也可以通过命令行创建:

``` tm-file-manager/ ├── app.py 主程序入口 ├── models.py 数据模型定义 ├── templates/ │ └── index.html 前端操作页面 └── static/ └── uploads/ 存储上传的商标附件 ```

创建完成后,注意uploads文件夹需要保证可写入权限,Windows系统默认满足,Linux系统执行chmod 755 tm-file-manager/static/uploads即可。

核心代码编写

所有代码都可以直接复制粘贴,不需要修改默认配置,以下是每个文件的完整内容:

1. 编写数据模型models.py

该文件定义商标档案的核心数据结构,直接复制全部内容:

``` from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() class TrademarkFile(db.Model): id = db.Column(db.Integer, primary_key=True) tm_num = db.Column(db.String(50), nullable=False, index=True) applicant = db.Column(db.String(200), nullable=False) apply_date = db.Column(db.Date, nullable=False) tm_class = db.Column(db.Integer, nullable=False) status = db.Column(db.String(20), nullable=False, default="待审核") attachment_path = db.Column(db.String(200)) create_time = db.Column(db.DateTime, server_default=db.func.now()) ```

2. 编写主程序app.py

从零搭建可商用落地的商标注册档案管理系统实操指南

该文件包含所有业务逻辑,直接复制:

``` from flask import Flask, render_template, request, redirect, send_file from models import db, TrademarkFile import os from openpyxl import Workbook app = Flask(__name__) BASE_DIR = os.path.abspath(os.path.dirname(__file__)) app.config['SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{os.path.join(BASE_DIR, "tm_files.db")}' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False app.config['UPLOAD_FOLDER'] = os.path.join(BASE_DIR, 'static', 'uploads') app.config['MAX_CONTENT_LENGTH'] = 10 1024 1024 db.init_app(app) with app.app_context(): db.create_all() @app.route('/') def index(): keyword = request.args.get('keyword', '') if keyword: files = TrademarkFile.query.filter(TrademarkFile.tm_num.contains(keyword) | TrademarkFile.applicant.contains(keyword)).all() else: files = TrademarkFile.query.order_by(TrademarkFile.create_time.desc()).all() return render_template('index.html', files=files, keyword=keyword) @app.route('/add', methods=['POST']) def add(): tm_num = request.form.get('tm_num') applicant = request.form.get('applicant') apply_date = request.form.get('apply_date') tm_class = int(request.form.get('tm_class')) status = request.form.get('status') attachment = request.files.get('attachment') file_path = None if attachment and attachment.filename: filename = f"{tm_num}_{attachment.filename}" save_path = os.path.join(app.config['UPLOAD_FOLDER'], filename) attachment.save(save_path) file_path = f"/static/uploads/{filename}" new_file = TrademarkFile( tm_num=tm_num, applicant=applicant, apply_date=apply_date, tm_class=tm_class, status=status, attachment_path=file_path ) db.session.add(new_file) db.session.commit() return redirect('/') @app.route('/delete/') def delete(file_id): file = TrademarkFile.query.get_or_404(file_id) if file.attachment_path: full_path = os.path.join(BASE_DIR, file.attachment_path[1:]) if os.path.exists(full_path): os.remove(full_path) db.session.delete(file) db.session.commit() return redirect('/') @app.route('/export') def export(): wb = Workbook() ws = wb.active ws.title = "商标注册档案" ws.append(['ID', '商标注册号', '申请人', '申请日期', '商标类别', '状态', '创建时间']) for f in TrademarkFile.query.all(): ws.append([f.id, f.tm_num, f.applicant, f.apply_date, f.tm_class, f.status, f.create_time.strftime('%Y-%m-%d %H:%M')]) export_path = os.path.join(BASE_DIR, 'trademark_files_export.xlsx') wb.save(export_path) return send_file(export_path, as_attachment=True) if __name__ == '__main__': app.run(debug=False, port=5000) ```

3. 编写前端操作页面index.html

将以下内容放到templates文件夹下的index.html中,直接复制:

``` 商标注册档案管理系统
商标注册档案管理
{% for file in files %} {% endfor %}
商标注册号 申请人 申请日期 商标类别 状态 附件 操作
{{file.tm_num}} {{file.applicant}} {{file.apply_date}} {{file.tm_class}} {{file.status}} {% if file.attachment_path %}查看附件{% else %}无{% endif %} 删除
```

启动运行与功能验证

完成代码编写后,打开命令提示符进入项目根目录,执行以下命令启动系统:

``` python app.py ```

启动成功后,打开浏览器输入地址:http://localhost:5000,即可看到操作界面,可测试核心功能:

  • 新增商标档案,支持上传PDF、图片、Word格式的申请附件
  • 通过商标注册号或申请人搜索已有档案
  • 导出所有档案为Excel文件,方便统计报备
  • 删除无效档案,同时自动清除对应附件,不占用冗余空间

商用公网部署调整

如果需要供团队多人远程使用,只需要做两个简单调整:

1. 更换大容量数据库(可选)

本地SQLite可支持千级以内档案管理,档案量超过1万条时,先执行pip install pymysql,再修改app.py中的数据库连接配置为:

``` app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://你的用户名:你的密码@数据库地址:端口/数据库名' ```

2. Linux服务器启动命令

执行pip install gunicorn安装生产级服务器,然后在项目根目录执行:

``` gunicorn -w 4 -b 0.0.0.0:80 app:app ```

绑定80端口后,直接通过服务器公网IP即可访问,整个系统部署完成。

从一团乱麻到井井有条:中学档案制度建设实操案例分享
从一团乱麻到井井有条:中学档案制度建设实操案例分享
害,说起来你们可能不信,去年我帮在郊区公办中学当教务主任的表姐搭档案体系,前前后后踩的坑连起来能绕学校操场三圈,最后搞出来的成品还拿了教育局的市级档案管理示范奖,今天就把这套我亲测能用的中学档案制度建...
2026年08月20日 05:20:01
微信咨询
电话联系
QQ客服
微信咨询一对一服务
服务热线: 028-8744 4417
QQ客服: 2305721818