InvenTree 库存管理系统提供低级别库存控制和零件跟踪,系统的核心是Pvthon/Django数据库后端,提供管理功能(基于Web)和RESTAPI,能与外部接口和应用程序进行交互,InvenTree支持插件,用户可以根据自己的需求进行扩展。
服务端:采用 Python 语言,搭配 Django 框架、DRF(Django REST Framework)构建 API,通过 Django Q 实现任务队列管理,通过 Django-Allauth 处理用户认证。
数据存储:支持 PostgreSQL、MySQL、SQLite 等关系型数据库,通过 Redis 实现缓存加速。
前端交互:基于 React 开发,集成 Lingui 实现国际化,使用 React Router 管理路由,搭配 TanStack Query 和 Zustand 处理状态,UI 组件库选用 Mantine。
DevOps 工具链:通过 Docker 实现容器化部署,利用 Crowdin 完成翻译,通过 Codecov 进行代码覆盖率分析,使用 SonarCloud 进行代码质量检测,通过 Packager.io 管理软件包。
容器化部署:推荐使用 Docker 快速启动,官方提供一键安装脚本:
wget -qO install.sh https://get.inventree.org && bash install.sh
云平台部署:支持 DigitalOcean 等云服务商的裸机部署,详细步骤可参考官方文档。
移动端支持:配套开发有移动端应用,用户可在 Android 应用商店和苹果 App Store 下载,方便随时查看库存数据。
InvenTree 的 REST API 基于 Django REST Framework 开发,有自描述特性,在本地部署实例后,可通过 http://127.0.0.1:8000/api-doc/
访问文档,支持调试模式下直接通过浏览器探索接口。
1、基础认证:使用用户名和密码进行验证,适合简单场景。
2、令牌认证:用户可生成持久化令牌,在请求头中以 Token <令牌值>
格式传递,提升 API 访问效率。
# Python 请求示例
import requests
token = '你的令牌值'
headers = {'Authorization': f'Token {token}'}
response = requests.get('http://localhost:8080/api/part/', headers=headers)
3、OAuth2/OIDC 认证:作为实验性功能,需手动启用,支持通过公共客户端和 PKCE 流程实现第三方认证。
用户角色决定 API 访问权限,可通过 /api/user/roles/
接口获取当前用户权限列表。超级用户拥有所有模块的读写权限,只读用户仅能查看部分数据,若执行超出权限的操作,系统将返回 403 错误。
命令行工具:通过 coreapi-cli
工具加载 schema 文件,实现无代码接口的交互:
pip install coreapi-cli
coreapi get http://127.0.0.1:8000/api-doc/
编程式调用:支持通过 Python 模块直接操作,简化数据查询和修改流程。
官方提供的 Python 模块为第三方开发提供了便捷接口,可通过 pip3 install inventree
安装。
用户名/密码认证:
from inventree.api import InvenTreeAPI
api = InvenTreeAPI('http://127.0.0.1:8000', username='admin', password='your_password')
令牌认证:
api = InvenTreeAPI('http://127.0.0.1:8000', token='your_token')
环境变量配置:可通过设置 INVENTREE_API_HOST
、INVENTREE_API_TOKEN
等环境变量实现无感知认证。
单条数据查询:已知对象主键时,直接初始化对象:
from inventree.part import PartCategory
category = PartCategory(api, 10) # 获取 ID 为 10 的零件类别
多条数据查询:使用 list
方法结合过滤条件:
from inventree.part import Part
parts = Part.list(api, category=10, assembly=True) # 查询类别 10 下的组装件
层级数据过滤:对于树形结构数据,可通过 parent
参数筛选子节点或根节点:
child_categories = PartCategory.list(api, parent=10) # 查询父节点为 10 的子类别
parent_categories = PartCategory.list(api, parent='') # 查询顶级类别
字段信息获取:通过 fieldNames
和 fieldInfo
方法查看模型字段元数据:
for field in Part.fieldNames(api):
print(field, '->', Part.fieldInfo(field, api))
关联数据操作:提供简单的方法获取关联数据。 part.getStockItems()
获取零件对应的库存项,支持上传文件附件等操作。
创建脚手架:使用 inventree-plugin-creator
工具快速生成插件模板:
pip install inventree-plugin-creator
create-inventree-plugin
代码结构:插件需继承 InvenTreePlugin
基类(旧版本为 IntegrationPluginBase
),通过定义元数据(如 NAME
、SLUG
、VERSION
)声明基本信息。
通过混入(Mixin)机制实现不同功能模块的扩展,支持的混入类型包括:
混入类型 | 功能描述 |
---|---|
ActionMixin | 执行自定义操作 |
BarcodeMixin | 支持自定义条形码解析 |
EventMixin | 监听系统事件(如库存变更) |
NavigationMixin | 在界面中添加自定义导航栏 |
ValidationMixin | 实现数据模型自定义验证 |
UrlsMixin | 注册自定义 API 端点 |
插件所需的 CSS、JavaScript 等静态文件需放置在插件包的 static
目录下,安装后可通过 http://实例地址/static/plugins/插件名/文件名
访问,系统会自动收集并部署这些文件。