Django还是Flask?仓库库存管理系统实战选型与完整实现
做仓库库存管理系统的时候我其实在Django和Flask之间纠结了整整一个晚上。后来想明白一件事这不是“哪个框架更好”而是“这个系统真正需要什么”。如果你也正准备用Python写一套仓库库存管理系统或者正卡在Django/Flask选型上不知道怎么抉择这篇文章应该能帮你省下不少踩坑时间。我会把整个项目从需求拆解、数据库设计、功能实现到部署上线完整过一遍把那些通用文档里不会写的细节也一并聊透。这个系统解决的核心问题是仓库作业里最烦人的三件事——入库、出库、库存到底是多少。用Excel记台账的痛做过仓库管理的人都知道多人同时改文件、单据和实物对不上、月底盘点全靠人肉。用Python Web框架做一套在线库存管理系统本质上就是把“账面流水”搬到Web上让每一次入库出库都有据可查库存数据实时可算。先说清楚我的结论最终落地用的是Django为主框架同时借鉴了很多Flask风格的轻量设计思路。整套源码基于Python 3.10 Django 4.2开发数据库用MySQL前端是Django模板加一点JavaScript。这不是一篇“教程复读”而是一个真实项目从零到上线过程中所有关键决策和实战操作的完整记录。1. 项目到底在解决什么问题需求拆解与系统设计1.1 一个仓库管理系统的真实业务痛点很多人做系统容易犯一个错误上来就画页面、写代码结果做出来的东西根本没有解决实际业务问题。仓库库存管理系统最核心的业务逻辑其实非常朴素每一次货品进仓、出仓、退仓都要留下记录基于这些记录系统能准确回答“现在某个仓库里到底有多少货”。但现实远比这复杂。先说盘点的场景仓库管理员需要知道某件商品的理论库存是多少可实际数出来的数总对不上为什么因为很多企业早期是手工登记入库单和出库单单据满天飞对账时只能靠人工翻纸。就算后来用了Excel也只是把纸换成了表格本质上还是静态台账。另一个痛点是权限。仓库经理、仓管员、采购员、财务对数据的需求完全不一样仓管员只需要扫码入库、打单出库采购员要看“哪些商品低于安全库存”财务关心的是“这段时间采购花了多少钱、出了多少货”。如果所有角色共用一套页面既不安全也不高效。所以我在这套系统的需求设计阶段就明确了几个硬性要求必须有多角色登录和权限控制所有库存变动必须有可追溯的流水记录库存数据不能直接修改只能通过入库单、出库单来驱动变更查询和报表要给不同角色不同的入口。这些要求后来直接决定了数据模型怎么建、接口怎么写。1.2 Django还是Flask我的选型决策标题里的“django-flask”其实道出了很多开发者的真实状态——在两者之间反复摇摆。我一开始先用Flask搭了个原型因为Flask足够轻写个hello world级别的小接口非常快。但项目刚走到“用户登录”这一步Flask的短板就暴露出来了没有内置Admin后台、没有ORM自带迁移、民间插件质量参差不齐很多东西要自己造轮子。下面是当时我做的对比表现在回头看这个表的结论依然成立对比维度DjangoFlask自带ORM与迁移内置迁移命令成熟需要外接SQLAlchemy配置稍多Admin后台自带可快速生成管理界面无需第三方扩展认证与权限内置User模型和session成熟稳定需自己接Flask-Login等模板渲染自带模板引擎功能完整Jinja2是标配但需手动配置项目结构官方推荐的app分离模式适合业务系统单文件起步结构自由但后期要自己约束入门曲线框架重、约定多、前期理解成本高轻巧灵活小项目起来极快适合场景中型以上业务系统、后台管理、快速原型微服务接口、前后端分离API、小型工具站点这个表不代表Django全面优于Flask而是说明仓库库存管理系统属于典型的“内网业务系统”需要后台管理、数据建模、权限控制Django天生就是干这个的。Admin后台尤其加分——开发阶段可以直接用Admin维护商品分类、测试数据省掉写增删改查页面的时间。Flask也不是没有价值。我一个很深的体会是Flask的“轻量约定”影响了我后来在Django里的写法尽量保持视图函数单薄、逻辑下沉到service层、利用中间件做横切关注点。换句话说架构上借鉴Flask风格的灵活性框架上选择Django的完整性这是我这套系统最终的技术路线。1.3 核心数据模型怎么设计数据模型是整个系统的地基。为了不让“库存怎么算”变成一团浆糊我采用了“库存流水驱动”的设计不直接存储计算后的库存数而是存储每一笔入库、出库操作当前库存通过流水汇总得到。我设计了这几个核心模型Warehouse仓库表仓库的名称、编码、地址、是否启用。Category分类表商品分类层级关系通过树形结构实现。Product商品表商品编码、名称、规格、单位、默认成本价、安全库存阈值。StockRecord库存流水表仓库ID、商品ID、类型入库/出库/盘盈/盘亏、数量、关联单据编号、操作时间、操作人。InboundOrder和OutboundOrder入库单/出库单单据主表包含供应商/客户信息、经手人、状态。为什么要单独建一张流水表而不是在Product上直接加一个current_stock字段因为直接改库存是个大坑一旦录入错误你无法知道这个数字是怎么来的也无法反推修正。而通过流水汇总任何库存变动都可以查根问底。这也是这套系统在之后使用中让仓库老会计最满意的一点——所有账目都有单据可以做凭证。安全库存阈值是另一个一开始没人提、后来被证明极其重要的字段。采购部门通过它生成补货建议仓库把它作为预警线。这个字段在设计产品表时就要想清楚不然后期加字段容易动到一堆代码。2. 核心功能模块逐一拆解2.1 登录鉴权我为什么用了Django自带用户体系库存管理系统里的登录不是走个过场。不同角色进来能看到什么、操作什么必须分清楚。我第一版用了自定义auth模块搞了半天发现不如直接复用Django内置的User模型再把用户分到组里。具体做法是启用Django默认的auth应用用Group定义“仓库管理员”“采购员”“财务”等角色然后给每个组的Group配置权限。视图层用login_required和permission_required做控制。比如入库单创建需要inbound.add_inboundorder权限而查看财务报表只需要report.view_stockreport权限。关于Session和Token在实际部署时我给内部用户走Django默认的session认证理由很简单系统主要在局域网内使用且页面是服务端渲染的session足够安全也不增加开发复杂度。只有未来要做移动端小程序时我才会在Django REST Framework里引入JWT。这个取舍是很多Flask新手容易犯迷糊的地方——API就用JWT、页面就用Session不要一刀切。2.2 入库出库最关键的业务闭环入库和出库是库存系统的核心业务闭环。逻辑不复杂但细节非常考验数据一致性。入库单的处理流程是创建入库单 → 填写明细商品、数量、批次号、生产日期 → 仓库管理员确认 → 系统写入库存流水并触发库存汇总更新。出库单类似但多了一个“库存是否够扣”的校验。我在出库接口里加了事务保护核心代码是这样的from django.db import transaction transaction.atomic def confirm_outbound(order_id): order OutboundOrder.objects.select_for_update().get(pkorder_id) for item in order.items.all(): stock StockSummary.objects.select_for_update().get( warehouseorder.warehouse, productitem.product ) if stock.quantity item.quantity: raise StockShortageError( f商品 {item.product.name} 库存不足剩余 {stock.quantity} ) stock.quantity - item.quantity stock.save() StockRecord.objects.create( warehouseorder.warehouse, productitem.product, change_typeoutbound, quantity-item.quantity, related_orderorder ) order.status confirmed order.save(update_fields[status])这里有两个关键点。第一select_for_update()是在事务里对行加锁避免两个人同时出库同一商品导致超卖——这个问题在原始需求里根本没人提但真实业务中一定会遇到必须提前处理。第二所有库存变更都通过StockRecord记录流水而不是直接改商品表这让对账和审计变得非常轻松。2.3 库存查询与报表统计库存查询页和报表模块的难点在于数据来自多张表查询条件多且报表要给不同角色不同维度的汇总。我用了Django ORM的annotate和aggregate来实时聚合当前库存 累计入库量 - 累计出库量 期初调整量。刚开始担心实时聚合性能不行实测下来反倒很惊喜——在几十万条流水级别下MySQL走对索引后查询基本都在百毫秒内完成。报表部分我做了三块入库明细报表按时间范围、商品、仓库筛选、出库明细报表、库存余额汇总表。为了不让页面卡顿我为StockRecord表添加了复合索引(warehouse_id, product_id, created_at)并把常用查询封装成了service层方法。Flask开发时那种“所有逻辑都堆在视图函数”的做法在Django项目里我刻意避免了。另外一个很实用的功能是库存预警通过一个定时任务每天扫描所有商品的安全库存阈值低于阈值的自动生成一条待办提醒。这个功能代码量不大但对业务价值极高——仓库从来不是担心货太多而是担心货缺了没人知道。3. 完整的实操搭建流程3.1 环境准备版本、虚拟环境和依赖先把环境搭好这是整件事里最不该出错的部分。我使用的组合是Python 3.10.12、Django 4.2.x、MySQL 8.0。如果你不想在本地装MySQL也可以先用SQLite跑通等部署时再切换数据库Django的ORM抽象让这个切换成本非常低。创建虚拟环境并安装依赖python -m venv venv source venv/bin/activate # Windows下是 venv\Scripts\activate pip install django4.2.* mysqlclient2.2.* pillowmysqlclient在Windows上偶尔安装失败如果遇到优先用预编译的wheel包或者干脆先装PyMySQL再在settings.py里配置。其实一个小众但好用的方案是开发阶段用自带的SQLite上线前再切到MySQL两种数据库之间的迁移文件完全一致只要在settings.py改配置即可。3.2 创建Django工程和应用结构我习惯用“一个项目多个app”的组织方式而不是把所有代码塞到一个app里。这样模块边界清晰后面加功能不会互相踩到。django-admin startproject warehouse_sys cd warehouse_sys python manage.py startapp inventory python manage.py startapp report python manage.py startapp user_auth常见的坑是很多人一开始把所有模型都写在models.py一个文件里几千行挤在一起后来改一个字段都要全局搜索。我的建议是一个app就专注一件事情比如inventory只管商品、仓库、库存流水和单据report只管查询、报表、导出user_auth只管用户、角色、权限。这正好对应了Flask蓝图里的模块化思想但Django在框架层面把这种约束固化下来了。3.3 编写核心模型这里直接给出inventory/models.py里最重要的几张表注意字段类型、关联关系和外键约束from django.db import models from django.contrib.auth.models import User class Warehouse(models.Model): code models.CharField(仓库编码, max_length20, uniqueTrue) name models.CharField(仓库名称, max_length100) address models.CharField(地址, max_length255, blankTrue) is_active models.BooleanField(是否启用, defaultTrue) class Category(models.Model): name models.CharField(分类名, max_length50) parent models.ForeignKey(self, nullTrue, blankTrue, on_deletemodels.CASCADE) class Product(models.Model): code models.CharField(商品编码, max_length32, uniqueTrue) name models.CharField(商品名称, max_length128) spec models.CharField(规格, max_length128, blankTrue) unit models.CharField(单位, max_length10, default个) safety_stock models.DecimalField(安全库存, max_digits10, decimal_places3, default0) default_cost models.DecimalField(默认成本价, max_digits12, decimal_places2, default0) category models.ForeignKey(Category, nullTrue, on_deletemodels.SET_NULL) class StockSummary(models.Model): warehouse models.ForeignKey(Warehouse, on_deletemodels.CASCADE) product models.ForeignKey(Product, on_deletemodels.CASCADE) quantity models.DecimalField(当前库存, max_digits12, decimal_places3, default0) class Meta: unique_together (warehouse, product) class StockRecord(models.Model): CHANGE_TYPES ( (inbound, 入库), (outbound, 出库), (adjust_up, 盘盈), (adjust_down, 盘亏), ) warehouse models.ForeignKey(Warehouse, on_deletemodels.CASCADE) product models.ForeignKey(Product, on_deletemodels.CASCADE) change_type models.CharField(变动类型, max_length10, choicesCHANGE_TYPES) quantity models.DecimalField(变动数量, max_digits12, decimal_places3) related_order models.CharField(关联单据号, max_length64, blankTrue) created_at models.DateTimeField(auto_now_addTrue) operator models.ForeignKey(User, nullTrue, on_deletemodels.SET_NULL)三个容易忽略的细节StockSummary的unique_together保证了同一个仓库同一个商品只有一条库存汇总记录这是并发控制的基础StockRecord.related_order不是外键而是字符串目的是兼容之后可能有多种单据来源所有金额字段我都用了DecimalField而不是FloatField避免浮点误差——这事仓库财务最在意。3.4 业务视图与接口实现视图层的核心原则是“薄”。我写了一个通用的service函数处理入库确认、出库确认视图只负责拿参数、调service、渲染结果。以“商品入库”为例流程是先从POST请求拿商品编码和数量校验通过后调用create_inbound_record最后返回json让前端刷新页面。虽然Django默认的模板渲染能搞定大部分场景但为了后续可能的移动端对接我保留了JSON接口的写法from django.http import JsonResponse from django.contrib.auth.decorators import login_required from .services import create_inbound_record login_required def inbound_api(request, warehouse_id): if request.method ! POST: return JsonResponse({ok: False, msg: 仅支持POST请求}, status405) product_code request.POST.get(code) quantity request.POST.get(quantity) try: record create_inbound_record( warehouse_idwarehouse_id, product_codeproduct_code, quantityquantity, operatorrequest.user ) return JsonResponse({ok: True, record_id: record.id}) except Exception as e: return JsonResponse({ok: False, msg: str(e)}, status400)这里有个经验不要把业务异常淹没在代码里要自定义异常类型比如StockShortageError、ProductNotFoundError在视图层统一捕获并返回友好提示。因为前端拿到原始异常堆栈既难看又不安全对用户来说“库存不足”比“IndexError: list index out of range”有意义一万倍。3.5 模板渲染和前端交互页面端我用Django模板加少量JavaScript。最大的体会是服务端渲染的模板在“报表查询、条件筛选”这类场景下比纯前后端分离更省事——不需要自己搭Vue/React工程也不用处理跨域和token刷新。基础模板base.html里放公共导航和侧边栏每个页面用{% extends base.html %}继承。列表页用Django的Paginator做分页from django.core.paginator import Paginator def product_list(request): products Product.objects.select_related(category).filter(is_activeTrue) paginator Paginator(products, 20) page_obj paginator.get_page(request.GET.get(page)) context {page_obj: page_obj, query: request.GET.get(q, )} return render(request, inventory/product_list.html, context)前端表格行的单击选中、批量删除等交互用原生JavaScript写反而比引整个jQuery更清爽。仓库作业人员喜欢大按钮、大字号这个细节在UI上我不堆组件而是保证核心操作按钮醒目、流程顺畅。4. 部署上线与实战踩坑记录4.1 本地调试时最容易踩的坑开发阶段几乎每个人都会踩的一个坑是ALLOWED_HOSTS。想用局域网IP让同事访问系统时Django会直接拒绝请求。正确做法是ALLOWED_HOSTS [*] # 仅限开发环境生产环境务必写真实域名或IP不要用通配符。第二个坑是静态文件。Django在DEBUGFalse之后不再自动托管静态文件此时必须用python manage.py collectstatic把所有静态文件收集到STATIC_ROOT再让Nginx去serve。如果你只改了DEBUGFalse却不处理静态文件页面会突然“变秃”这是100%会遇到的。第三个坑是时区与时间存储。我一开始用的USE_TZ False结果时间戳和MySQL原生的datetime不统一跨时区查询出问题。后来改成USE_TZ True数据库里统一存UTC所有显示场景通过模板的Django|localtime|date过滤器转换为北京时间。4.2 部署到服务器需要考虑的事生产部署我选的最稳妥最简单的组合Nginx Gunicorn MySQL同一台Linux服务器。为什么不选Docker因为这套系统的最终用户是公司内部服务器规格有限Docker带来的隔离价值有限反而多一层运维负担。如果未来要频繁迁移、弹性扩容再上K8s也不迟。Gunicorn配置文件里我会特别关注两个参数workers 3timeout 120。worker数量公式是CPU核数×21服务器只有2核所以配3个worker足矣。timeout是我踩过坑的地方报表导出功能在数据量大时超过30秒Gunicorn默认就杀掉了worker所以要把超时时间调大或者在同步导出之外改成异步任务。这一点在开发环境永远遇不到在上线当天就能把你整得欲哭无泪。4.3 性能与并发优化建议库存系统在真实使用中最卡的页面往往是报表页和流水查询页。我的优化思路按优先级排序数据库索引StockRecord表必须建复合索引查询条件的字段都要建索引。ORM减少重复查询列表页用select_related(category)预取外键避免N1查询。大数据量导出时不用同步请求改到后台把CSV生成到服务器再通过下载链接交给用户。定时汇总如果流水突破百万级实时聚合会变慢这时可以每天凌晨通过定时任务生成库存快照页面直接读快照。这些优化里前三项是Code层面的常规操作最后一项属于架构演进。大多数仓库管理系统到百万流水可能要两三年所以普通项目先把索引做好就足够撑住了。5. 常见问题速查表与避坑技巧实录现象可能原因解决方案页面能打开但样式全是裸HTMLDjango未收集静态文件执行collectstatic并在Nginx配置静态目录局域网IP访问被拒绝ALLOWED_HOSTS未包含该IP在设置中加上IP或域名并发出库导致超卖没有做行锁或事务保护用select_for_update()包裹扣库存逻辑数据库中汉字显示乱码MySQL表字符集不是utf8mb4建库时指定utf8mb4连接参数加charsetutf8mb4Gunicorn worker频繁被杀某个请求超过timeout阈值增大timeout或将长任务改为异步时间显示比实际慢8小时USE_TZ与展示时区配置不一致统一UTC存储模板渲染时本地化入库单重复提交出现两次记录前端没有防重复提交按钮提交时禁用接口幂等性校验这里说几个别人很少在文章里提到的独家技巧。第一个是日志。我坚持把所有库存变动写成结构化日志格式是“时间-操作人-操作类型-单号-商品编码-数量”。这个日志在排查问题时比数据库记录还直观出了问题直接grep当天日志就能秒定位不用查数据库翻半天。第二个是Admin后台的用法。Django自带Admin不光是个“看数据”的工具我更常拿它做“数据订正入口”。比如库存盘点发现差异我在Admin里直接修改StockSummary同时在StockRecord里补一条调整记录。相比写SQL脚本用Admin操作维度清晰、不易出错还给非技术人员留了入口。第三个是关于“数据备份”。我每天凌晨用crontab跑mysqldump备份文件保留14天。有一次服务器磁盘满系统直接变只读原因就是备份文件太多了。后来我给备份脚本加了个自动清理find /backup -mtime 14 -delete。这种细节看着小真正出事时能救命。6. 这个项目还能怎么扩展写到这里整个系统的核心已经从“能不能跑”演进到“好不好用”的阶段了。我在实际使用中发现用户对系统的期待是无穷无尽的库存管理只是仓库业务的一个底层模块它真正的价值在于给上层决策提供数据。后面可以考虑的方向包括对接条码扫描枪和蓝牙打印机、引入采购建议和供应商管理、把预警消息推送到钉钉或企业微信、做移动端简化版给仓管员扫码用。我个人在实际操作中的体会是技术难度其实都不是障碍真正的障碍往往在需求边界上。比如要不要支持多仓库调拨、要不要做批次和保质期管理、要不要跟ERP系统做对接这些问题必须在动手之前跟业务方确认清楚否则做完了再改高层模型成本会成倍增长。框架选型、代码结构、数据库设计这些技术决策最终都要回到“系统到底要服务谁、解决什么问题”这个原点。把这一个问题想透了后面的路其实很顺。

相关新闻

联合储能的配电网优化调度及新能源消纳评估Matlab实现

联合储能的配电网优化调度及新能源消纳评估Matlab实现

最近接了一个项目,标题是“联合储能的配电网优化调度及新能源消纳能力评估研究(Matlab代码实现)”,光看名字就知道这是个典型的电力方向课题——涉及储能建模、配电网潮流、优化调度、新能源消纳评估,还要求用 Matlab …

2026/10/9 5:08:14 阅读更多 →
Android动漫聚合插件设计解析:从配置到播放的完整指南

Android动漫聚合插件设计解析:从配置到播放的完整指南

1. 从零拆解一个动漫聚合插件的核心设计逻辑1.1 这个插件到底解决了什么问题在Android平台上追番,最让人头疼的从来不是找不到资源,而是资源太散。A站的番在A应用里,B站的番在B应用里,某些老番又只存在于某个小众站点。每换一部番…

2026/10/9 5:08:14 阅读更多 →
多时钟FPGA设计避坑指南:MMCM/PLL配置、跨时钟域与接口时钟方案

多时钟FPGA设计避坑指南:MMCM/PLL配置、跨时钟域与接口时钟方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 5:07:14 阅读更多 →

最新新闻

学Simulink——基于反电动势过零检测的直流无刷电机(BLDC)无感控制仿真

学Simulink——基于反电动势过零检测的直流无刷电机(BLDC)无感控制仿真

目录 手把手教你学Simulink——基于反电动势过零检测的直流无刷电机(BLDC)无感控制仿真 一、 引言:当“霍尔传感器”成为过去式——反电动势过零检测如何成就真正的“无感”BLDC? 二、 问题本质:反电动势过零的“物理机制”与“协同逻辑” 1. 核心物理机制 2. 协同逻辑…

2026/10/9 5:35:40 阅读更多 →
Agent执行错操作怎么办——从权限确认、沙箱隔离到幂等回滚的安全执行实战

Agent执行错操作怎么办——从权限确认、沙箱隔离到幂等回滚的安全执行实战

Agent 安全执行不是“多弹确认框”,而是把权限、隔离、验证与恢复做成一条系统闭环。 AI Agent | 智能体安全 | 权限控制 | Human-in-the-Loop | 沙箱隔离 | 最小权限 | 幂等性 | 回滚机制 | Guardrails | MCP安全 当 Agent 从“给建议”升级到“真正执行动作”,系统…

2026/10/9 5:35:40 阅读更多 →
多Agent成本失控实战——并发、上下文与Token预算如何系统治理 从“Agent越多越强”到“每一美元都能解释”

多Agent成本失控实战——并发、上下文与Token预算如何系统治理 从“Agent越多越强”到“每一美元都能解释”

多Agent成本失控实战——并发、上下文与Token预算如何系统治理从“Agent越多越强”到“每一美元都能解释”#多Agent #Agent #LLM #Token #成本优化 #上下文工程 #Prompt Caching #并发控制 #模型路由 #可观测性多Agent系统真正昂贵的地方,往往不是…

2026/10/9 5:35:40 阅读更多 →
context-mode:基于上下文感知的终端环境自动切换

context-mode:基于上下文感知的终端环境自动切换

1. 为什么需要 context-mode:从手动切换走向规则切换1.1 配置切换的痛点,可能只有折腾过的人才懂每天要在三四种工作场景里来回切换:白天在项目仓库里写业务代码,下午翻开几个开源项目的源码做研究,晚上可能还要写自己…

2026/10/9 5:35:40 阅读更多 →
Meson 0.53.0 新特性深度解析:fs 模块、动态链接器选择与构建配置摘要实战

Meson 0.53.0 新特性深度解析:fs 模块、动态链接器选择与构建配置摘要实战

构建工具 【免费下载链接】meson The Meson Build System 项目地址: https://gitcode.com/gh_mirrors/me/meson 点击查看 免费下载 本篇文章以 Meson 0.53.0 官方发布说明(Release-notes-for-0.53.0.md)为主体,逐项解析该版本引入…

2026/10/9 5:35:40 阅读更多 →
HARA与风险评估方法

HARA与风险评估方法

EPS electronic power steering, 电子助力转向系统 发现了问题,下面就要制定措施 内容来源 : https://www.bilibili.com/video/BV1GdeQ6xEHi?spm_id_from333.788.videopod.sections&vd_source473185c2a7a9b79ef8fcea7dce5ca501

2026/10/9 5:34:40 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 13:34:55 阅读更多 →