基于Flask的宠物医院就诊美容管理系统开发实战
去年接了一个宠物医院的信息化需求要做一套“flaskpython宠物医院就诊美容管理系统”。这个项目不算大但业务线很杂就诊、美容、收银、会员、库存全都要管前前后后花了两周时间才跑顺。用Flask来做这种垂直场景的中小管理系统确实舒服灵活性高、周边库齐全写起来比Django更贴合这种快速定制的需求。这篇东西不是教科书而是我自己从需求梳理到上线部署的完整实战记录。如果你正准备做类似的诊所管理系统或者正在写涉及Flask的课程设计、个人项目这篇文章应该能帮你避开不少我踩过的坑。1. 项目背景与需求梳理1.1 宠物医院的业务痛点这家宠物医院不大但业务已经分成两条主线一边是日常的看病就诊包括挂号、候诊、医生开方、收费取药另一边是洗护美容包括洗澡、修剪、药浴、SPA等项目预约和服务过程管理。之前全靠前台在Excel表里记人记项目微信群预约医生手写病历每天下班对账要对一两个小时。最痛的点有三个。第一是候诊和美容状态不透明宠物主人在休息区干等着不知道自己的宠物排到第几号、美容做到哪一步。第二是就诊和美容的数据完全割裂同一个宠物今天刚看完病明天来做药浴前台还得重新录入主人的电话和宠物信息。第三是财务统计特别费劲现金、扫码、会员卡混在一起月底想看看哪种服务卖得好只能翻纸质单据。这套系统的核心目标就是把两条业务线统一到一个平台上让前台、医生、美容师各干各的活数据自动流动财务账目随时能查。需求梳理下来一共要处理七类角色系统管理员、前台接待、医生、美容师、收费财务、宠物主人、库存管理员。实际上医生和财务常常是同一人但权限设计上不能混在一起后面才好扩展。1.2 系统功能模块拆解和医院相关负责人聊了两轮之后我把功能拆成了六大模块。第一个是登录与权限管理这个不多说每种角色只能看到自己该看的界面。第二个是宠物主人和宠物档案管理一个主人可以带多只宠物来每只宠物独立建档记录品种、性别、生日、疫苗情况、过敏史这是所有业务的基础。第三个是就诊管理包含挂号登记、候诊队列、医生接诊、电子病历、开药建议、病历归档。挂号的时候要能区分初诊和复诊复诊能快速调出历史病历和上次用药。第四个是美容服务管理前台登记美容预约美容师接到任务后更新状态从“待服务”到“服务中”到“待确认”最后主人确认签字后流转到待支付。第五个是收银与会员管理包括收费单、支付方式、会员充值、会员折扣、套餐管理。第六个是统计报表包括今日挂号量、今日营收、服务项目销量排行、药品库存预警。这里我没有把库存做成一个完整的进销存系统因为宠物医院的药品和美容耗材流转比较简单只需要库存扣减和低库存提醒就够了。1.3 为什么选Flask而不是Django或Spring这个系统数据量一天可能也就几百条记录并发峰值在几十以内用Spring Boot完全是杀鸡用牛刀Django自带Admin和ORM功能全但项目结构和约束太重很多地方我不是很认同。Flask胜在灵活路由、ORM、模板、表单都可以按需选择写起来很自由。具体技术栈我用的是Flask 2.x SQLAlchemy Jinja2 WTForms Bootstrap 5。数据库从SQLite起步开发调试省事上线前迁移到MySQLSQLAlchemy的ORM层让我不用改业务代码只改连接字符串和少量方言相关的东西。前端没有用Vue和React因为页面大多是服务台和看板服务器端渲染配合少量Ajax足够而且模板语法更贴近后端开发者的直觉出问题好排查。整套系统的核心价值在于“业务状态的可跟踪性”这一点在下面的数据模型和状态机设计上体现得最明显。2. 数据库设计与核心模型2.1 实体关系梳理动手写第一行代码之前我先把实体关系画在了白板上。核心实体有七个用户、员工、宠物主人客户、宠物、挂号单、病历、美容预约单、美容订单、收费单。用户和员工是分开设计的用户表存登录账号和角色标识员工表存真名、职务、手机号、排班信息。一个主人可以有多只宠物宠物和主人之间是多对一。挂号单关联宠物和接诊医生一份挂号单可以对应多份病历记录但实际使用中通常是一份。美容预约单和宠物、美容师关联预约单生成后会在美容师的工作台上产生一条待办任务完成任务后由美容预约生成美容订单这个设计要重点说一下。就诊和美容为什么都做成“单子—订单”两层结构因为就诊的挂号单是服务过程凭证收费是另一步美容的预约单则是服务计划真正完成服务以后才生成需要结算的订单。这种将“服务执行”和“订单计费”解耦的模式以后增加新的服务类型非常方便。2.2 关键表结构设计先说宠物主人表字段包括主键、姓名、手机号、微信号、会员等级、会员余额、创建时间、备注。这里有个小坑手机号要加唯一索引而且要用字符串类型而不是整数原因很简单手机号可能有前缀0或者将来支持座机而且11位数在部分系统里会溢出整数范围。宠物表字段包括主键、主人外键、宠物名、种类、品种、性别、生日、绝育状态、过敏史、疫苗记录、头像路径。宠物名不能作为唯一键因为重名太普遍我会用“主人宠物名”做一个逻辑上的查重提醒但是不强约束。挂号单字段包括挂号单号、宠物外键、主人外键、接诊医生外键、挂号类型、状态、症状描述、挂号时间、接诊时间、完成时间、收费单外键。单号我用时间戳加随机数生成例如20250314-001避免用户手动输入。状态字段后续单独说。美容预约单和美容订单是分开的。预约单有预约时间、宠物外键、美容师外键、项目清单、备注、状态。美容订单则包含预约单外键、实际开始时间、结束时间、总金额、支付状态、优惠金额、实付金额、支付方式。项目和订单是多对多通过中间表关联中间表里保存项目名称快照和单价快照这是记账系统的常见做法因为服务项目的价格会调整但历史账单必须保留当时的售价。2.3 业务状态机设计状态字段虽然简单却是整个系统的灵魂。挂号单的状态我设计成五个已挂号、候诊中、就诊中、已完成、已取消。前台创建挂号单时默认“已挂号”医生点击“开始接诊”后变成“候诊中”还是“就诊中”这里我经过了实际业务考虑候诊队列需要排优先级所以新增一个“候诊中”状态表示已经到科室前等待医生点接诊后才变为“就诊中”。叫号的大屏上只显示候诊中和就诊中的单子这样主人随时能看到前面还有几个。美容预约单的状态是待确认、已确认、已到达、服务中、待确认完成、已完成、已取消。前端预约可以由主人通过电话或现场发起所以先“待确认”前台打电话确认后“已确认”。宠物送到美容区后美容师改为“已到达”开始服务时“服务中”服务结束先“待确认完成”主人检查满意后点确认自动生成订单并且状态变成“已完成”。这里有一个血泪教训不要在状态字段里用中文不要用随意字符串。所有状态用英文枚举字符串例如 registered、waiting、visiting、completed、cancelled显示的时候再映射成中文。一是数据库排序和查询更稳定二是代码里写if record.status waiting一眼就能看懂中文状态还容易混进全角字符。3. Flask项目结构与核心功能实现3.1 蓝图划分与项目目录Flask的蓝图机制是组织多模块项目最核心的工具我按业务域拆成四个蓝图auth、reception、doctor、grooming外加一个公共的main和system。main管首页和看板system管用户和基础数据。项目目录大概是这样的pet_hospital/ ├── app/ │ ├── __init__.py │ ├── models/ │ │ ├── __init__.py │ │ ├── user.py │ │ ├── pet.py │ │ ├── visit.py │ │ └── grooming.py │ ├── blueprints/ │ │ ├── auth.py │ │ ├── reception.py │ │ ├── doctor.py │ │ ├── grooming.py │ │ └── system.py │ ├── templates/ │ │ ├── base.html │ │ ├── auth/ │ │ ├── reception/ │ │ ├── doctor/ │ │ └── grooming/ │ ├── static/ │ │ ├── css/ │ │ └── js/ │ └── utils/ │ ├── decorators.py │ └── helpers.py ├── migrations/ ├── requirements.txt └── run.pyapp/__init__.py里负责创建Flask应用、注册蓝图、初始化SQLAlchemy和登录管理。每个蓝图在自己的__init__.py里定义一组路由比如reception蓝图负责挂号、查询宠物档案、候诊队列、收费doctor蓝图负责接诊和病历grooming蓝图负责美容预约和美容师工作台。这样模块之间依赖很少后面加新功能不容易互相踩脚。3.2 登录认证与角色权限控制登录认证我用了Flask自带的session密码用werkzeug.security的generate_password_hash和check_password_hash。用户表里有一个role字段分别取值admin、front_desk、doctor、groomer、cashier。登录成功后除了存user_id还要把role也存进session这样每次请求判断角色时不需要再查一次数据库。权限控制最优雅的方式是写一个装饰器。我封装了两个装饰器一个叫login_required一个叫role_required。role_required用法是from functools import wraps from flask import session, abort, redirect, url_for def role_required(*roles): def wrapper(f): wraps(f) def decorated(*args, **kwargs): if user_id not in session: return redirect(url_for(auth.login)) if session.get(role) not in roles: abort(403) return f(*args, **kwargs) return decorated return wrapper使用的时候在路由上加两行reception_bp.route(/register_visit, methods[GET, POST]) login_required role_required(front_desk, admin) def register_visit(): ...这个设计的好处是角色权限一目了然而且如果某天需要让医生也能挂号直接在装饰器参数里加一个doctor就行。3.3 就诊预约与候诊队列实现前台挂号页面支持两种模式一种是为当前到店的宠物现场挂号另一种是提前预约后到时自动挂号。现场挂号的逻辑是先根据手机号搜索主人选中宠物再填写初诊/复诊和症状描述提交后生成挂号单状态为registered。医生工作台上通过轮询实时刷新候诊队列。候诊队列的查询核心是waiting_list Visit.query.filter( Visit.status.in_([registered, waiting]) ).order_by(Visit.created_at.asc()).all()这里注意一定要加索引否则数据量大了排序会很慢。我一开始漏掉了created_at索引后来测试到两千条数据时接口慢了将近一秒加了索引后降到几十毫秒。医生点“开始接诊”界面上弹出倒计时确认防止误操作。接诊后状态改为visiting同时记录接诊时间。医生填写电子病历提交后自动关联到当前挂号单。这里有个细节每次保存病历不是覆盖前一条而是新增一条历史记录字段里包含就诊时间和医嘱这样方便追溯历史病情变化。叫号屏幕的实现用了一个简单的Ajax轮询每10秒钟请求一次候诊队列接口然后重新渲染列表。10秒的间隔是通过实际体验折中的太频繁浪费资源太长主人会着急。如果想要实时推送可以上WebSocket但对这种规模的项目完全没有必要。3.4 美容服务流程管理美容预约的流程一开始我是这样做的前台在页面选择宠物、美容项目、预约时间提交后生成预约单。美容师登录后在自己的工作台看到“今天的预约列表”按时间排序逐条处理。每处理一条前端通过Ajax更新后端状态。美容师开始服务时要点击“开始服务”系统校验当前时间与预约时间不能差太远防止美容师忘记了订单还拖到第二天。服务过程中状态是grooming。全部服务完成后美容师先点击“完工”状态变为pending_confirm此时大屏上显示“请主人确认”。主人在前台确认后订单状态变为completed系统根据项目快照自动生成收费单总金额等于所有服务项目之和如果有会员折扣则按会员等级打折。这里有一个特别容易出错的点服务项目表里保存的是当前价格而美容订单中保存的是服务时的价格。如果等订单完成后才去服务项目表里取价格万一运营调了价历史账单金额就会错。所以生成订单时必须复制当时的价格快照。我在代码里创建订单明细时会显式写入item_name和unit_price两个字段不再去关联实时价格。3.5 订单结算与报表统计收费这一块我用了SQLAlchemy的with db.session.begin()事务块确保扣库存、扣余额、记录流水这几个操作要么全部成功要么全部回滚。比如宠物主人用会员余额支付时流程是锁定会员记录或者检查余额充足、创建收费单、更新余额、创建余额流水。这里的并发问题我在第6章细说。报表统计的核心SQL集中在几个聚合查询。今日营收用total_revenue db.session.func.sum( Payment.amount ).filter( Payment.pay_time today_start, Payment.pay_time tomorrow_start ).scalar()服务销量排行按PaymentItem.item_name分组求和。我还做了一个按小时的折线图数据用于观察医院全天客流高峰这部分用原生SQL比ORM更直观。说实话这类统计查询用Flask-SQLAlchemy的链式查询能写但一旦涉及日期分组、多表聚合直接用db.session.execute(text(sql))更省心出错了也容易排查。4. 前端界面与交互设计4.1 模板继承与前端资源组织前端我全部采用Jinja2模板加Bootstrap 5。基础模板base.html里定义了侧边栏、顶部导航、内容区和右下角的Flash消息区域。每个业务页面只需要{% extends base.html %}然后重写{% block content %}。同一套模板不能一个页面一个样式所以我把公共操作做成了宏比如宠物信息卡片、状态标签、分页组件。状态标签用Bootstrap的badge根据不同状态映射不同颜色。这个映射在一个字典里维护STATUS_BADGE { registered: secondary, waiting: info, visiting: primary, completed: success, cancelled: danger, }模板里直接{{ badge_color(visit.status) }}就行这样可以保证全站的视觉效果统一。4.2 候诊大屏与美容看板候诊大屏是这家医院最满意的功能。以前大厅墙壁上贴着一张纸每次叫号都要前台写名字。现在我在医院大厅挂了一台电视用浏览器全屏打开候诊页每10秒刷新一次。页面分为三列当前叫号、正在就诊、接下来五位。当前叫号字体用超大号30米外都能看清。美容看板的逻辑类似但多了一个“美容师任务网格”每个美容师一行显示其当前正在服务的宠物名和项目以及剩余进度。进度是美容师自己点按钮更新的所以这个看板本质上是给美容师自己看的同时也让主人知道自己的宠物在哪个工位。要说明的是我没有做宠物佩戴设备之类的物联网功能那属于另一个项目这里用的是纯软件运作流程。4.3 表单验证与用户反馈表单验证用了WTForms但实际用下来发现界面提示不够直接所以我在前端模板里用Jinja2手动渲染了每一个字段的错误列表同时加了浏览器的原生required校验。后端再验证一次是必须的因为前端校验可以被绕过。用户反馈方面所有保存、删除、结算操作都返回Flash消息成功后回到列表页。有些操作需要二次确认比如取消挂号前端弹一个confirm()框防止手滑。这里有个细节Flash消息的category我用的是success、danger、warning三种模板里根据category渲染不同颜色的alert。别在消息文本里拼HTML容易中招XSS所有动态内容都需要{{ value }}自动转义。5. 部署、测试与性能优化5.1 开发环境与测试数据开发阶段我使用的是SQLite数据库为了性能接近线上我写了一个seed.py脚本用循环生成了200个主人、300只宠物、30天的就诊和美容记录。这些数据让所有页面在真实数据量下不至于太卡也暴露了不少问题。尤其是一些统计SQL在几行数据时跑得飞快到了几千行就慢得受不了。建议在做这类系统时千万不要只拿三条数据测功能一定要造一批边界数据空值、超长字符串、同一天上百条记录、同一只宠物多次复诊。我在测试就发现有一个SQL查询漏了时间范围条件把未来日期的预约都统计进了当日营收这个bug如果只测几条数据就完全不可能发现。5.2 gunicorn nginx 部署部署时我用的是gunicorn作为WSGI服务nginx作为反向代理和静态文件服务。gunicorn的启动命令gunicorn -w 4 -b 127.0.0.1:8000 run:app-w 4表示4个工作进程足以应对日常并发。再配合systemd守护进程保证服务崩溃后自动重启。nginx配置关键片段server { listen 80; server_name pet.example.com; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } location /static { alias /opt/pet_hospital/app/static; } }为什么静态文件交给nginx而不是Flask因为Flask自带的静态文件处理在开发时很方便但生产环境性能差很多尤其图片动辄几百KB用WSGI传纯属浪费。交给nginx后Flask进程只处理动态请求压力小很多。5.3 性能优化策略这个规模的系统谈不上高并发但基础优化还是做了。第一所有频繁查询字段都建立索引包括外键、状态、时间。第二ORM查询加上joinedload或selectinload避免循环请求数据库。第三在统计报表接口中把当日营收缓存到内存5分钟内不重新计算。我用了简单的cachetools库而不是Redis因为部署简单且性能足够。有一个不算优化但很重要的做法在调试时开启SQLALCHEMY_ECHO True观察每次查询的SQL语句找出N1查询。比如列出挂号单列表时如果每行都要查询一次宠物名和主人名页面会慢得离谱。用了joinedload之后一次查询全部带出响应时间直接从800ms降到80ms级别。6. 常见问题与排查技巧6.1 SQLAlchemy Lazy Loading的坑新手最容易踩的坑是SQLAlchemy的懒加载。当我打印一条挂号单列表时模板里访问visit.pet.nameORM会立刻执行一条额外的SQL去查pet表。如果列表有50条就多了50条查询数据库连接开销直接卡顿。我在代码里使用完查询之后统一通过selectinload(Visit.pet).selectinload(Pet.owner)一次性加载需要的关联对象。排查方法很简单开启SQLAlchemy的echo看到列表接口打出来几十条SELECT那就是发生了懒加载。再加上Flask-DebugToolbar这个扩展可以直接在页面底部看到数据库查询次数这个工具强烈推荐。6.2 并发预约冲突美容预约容易出现两个人同时预约同一个美容师同一个时间段。如果只靠前端点击时判断在高并发下会被后写入的覆盖。解决思路是数据库约束。在美容预约表上设置唯一约束字段组合是美容师、预约日期时间、状态不是已取消。但唯一约束不能带条件所以实际做法是创建预约前先通过事务锁住美容师当天的时间段范围。我这边的实现用了SELECT FOR UPDATE在SQLAlchemy里写成with db.session.begin(): locked db.session.query(GroomerSchedule).filter( GroomerSchedule.groomer_id groomer_id, GroomerSchedule.slot_time slot_time ).with_for_update().first() if locked and locked.status ! cancelled: raise ConflictError(该时间段已被预约)如果没有锁两个请求同时查到时间段空闲再同时写入就会产生脏数据。有的方案是应用层加锁但在多进程gunicorn下不牢靠数据库行锁才是最可靠的。6.3 时间与时区问题宠物医院的业务时间记录如果直接用datetime.now()一旦服务器时区是UTC所有记录都和本地时间差了8个小时。这个坑在部署时尤其致命。我的解决方案是数据库统一存UTC时间Flask配置app.config[TIMEZONE] Asia/Shanghai模板里显示时用辅助函数统一转换。同时所有日期参数都通过日期选择器传入前端按时区格式化后端解析成UTC再查询避免字符串比较。特别注意统计报表的“今日”边界。不要用datetime.now().date()直接与数据库里的UTC时间比较必须先算出本地时区的开始和结束时间再转换成UTC。否则凌晨零点到八点之间统计出来的“今日营收”会漏掉早上的订单。6.4 文件上传与路径安全宠物头像和病历附件上传功能我最初直接把上传文件名拼到路径里后来发现存在路径穿越风险。正确做法是使用secure_filename函数过滤文件名并且文件名加上uuid前缀防止重名。上传目录配置成绝对路径不允许通过相对路径穿越。上传大小的限制也要做好在nginx和Flask两处都设置限制。Flask里通过MAX_CONTENT_LENGTH配置限制为2MBnginx的client_max_body_size保持一致超过直接返回413。这个看起来不起眼但如果忘记限制一张几十MB的照片上传能把服务器磁盘挤爆。7. 项目实操心得与后续扩展做完这套系统我个人最深刻的体会是像宠物医院这类传统行业的数字化需求真正的难点不是技术而是把业务流程变成状态机和数据流。每一个状态什么时候变、由谁来变、变了之后对报表的影响这些理清了代码自然就规范了。最后分享一个小技巧整个系统里我用得最多的是“订单快照”思维。无论是美容订单里的项目单价还是收费单里保存的支付前余额都是复制当时的业务快照而不是实时去关联。这个习惯让我在处理后续对账和历史数据回溯时几乎不用费脑筋。如果这个系统继续迭代我下一步会加一个面向宠物主人的微信小程序让主人直接在线预约挂号、查看候诊进度和美容状态。后端现有接口大部分可以复用只要把预约和状态查询的接口整理成JSON API就行。另外还会增加一个简单的消息推送美容完成后主动通知主人取宠物。这套Flask架构完全撑得起这些扩展不需要推翻重来。

相关新闻

软考 系统架构设计师历年真题集萃(35)

软考 系统架构设计师历年真题集萃(35)

接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(34) 第56题 遗留系统的演化可以采用淘汰、继承、改造和集成四种策略。若企业中的遗留系统技术含量较高,业务价值较低,在局部领域中工作良好,形成了一个个信息孤岛时,适合于采用( )演化策略。 A. 淘汰 B. 继承…

2026/10/11 4:23:10 阅读更多 →
JavaWeb简易购物车实战:基于Session的内存购物车实现与避坑指南

JavaWeb简易购物车实战:基于Session的内存购物车实现与避坑指南

简介:这是一套基于JavaWeb技术实现的简易购物车系统完整源码,适合Java初学者及希望巩固Web开发基础的中级开发者。代码围绕Servlet与JSP、Session会话管理、JDBC数据库交互、MVC设计模式、JSTL与EL表达式等核心知识点展开,覆盖商品展示、加入…

2026/10/11 4:22:10 阅读更多 →
Docker化CPLEX:解决线性规划求解器部署难题的完整指南

Docker化CPLEX:解决线性规划求解器部署难题的完整指南

简介:面向需要在容器环境集成 IBM ILOG CPLEX 求解器的 Java 开发者与运维人员,这份资源给出了基于 Docker 的 CPLEX 部署方案,解决本地安装依赖多、迁移困难的问题,尤其适合将 CPLEX 运行时组件嵌入应用或镜像的落地场景。资源共…

2026/10/11 4:22:10 阅读更多 →

最新新闻

程序员金三银四突击指南:简历、算法与面试实战策略

程序员金三银四突击指南:简历、算法与面试实战策略

金三银四这个说法,在程序员圈子里传了好多年。每年三到四月一开春,招聘需求集中放出来,各个团队的 HC 批下来了,跳槽窗口也打开了。很多程序员把它当成换工作的黄金期,也有人临时抱佛脚,从二月中下旬才开始…

2026/10/11 5:00:29 阅读更多 →
Compose自定义组件交互:从指针事件到手势处理实战指南

Compose自定义组件交互:从指针事件到手势处理实战指南

1. 为什么自定义组件绕不开交互这一层自定义 Compose 组件这事,画布和绘制只是入门,真正决定一个组件好不好用的,往往是它对交互 Interaction 的处理。你画一个滑块轨道和滑块头,如果不会正确处理拖拽手势,它就是一个不…

2026/10/11 5:00:29 阅读更多 →
幸运数字的二进制映射:长度分块与第K个数求解

幸运数字的二进制映射:长度分块与第K个数求解

如果你刷算法题时刷到洛谷这类OJ的P开头编号,看到“P3499 幸运数字”这个名字,第一反应大概率是“又一道数论题”。但我把这题做完之后发现,它披着“幸运数字”的外衣,内核其实是个非常经典的字典序编号问题:给定一个只…

2026/10/11 5:00:29 阅读更多 →
Python循环全攻略:for/while、迭代器与避坑技巧

Python循环全攻略:for/while、迭代器与避坑技巧

Python里的循环,说多不多,说少不少,但每次带新人或者自己回看老代码,总能发现一些值得唠叨的细节。这份整理我是按“极简但不简单”的方式做的,目的不是把文档抄一遍,而是把 for 和 while 两条主线、break/…

2026/10/11 5:00:29 阅读更多 →
企业级大模型私有化部署实战:基于vLLM的推理引擎调优指南

企业级大模型私有化部署实战:基于vLLM的推理引擎调优指南

做企业级大模型私有化部署这件事,老实说最让我头疼的不是模型算法,而是推理引擎的选型和调优。第一次尝试时我图省事,直接用通用的模型加载库起服务,结果并发一起来,显存被动态KV缓存塞得乱七八糟,接口延迟…

2026/10/11 5:00:29 阅读更多 →
无热影响区,微米级精切 | 不同种类金属薄材紫外皮秒激光切割实录

无热影响区,微米级精切 | 不同种类金属薄材紫外皮秒激光切割实录

△ 金属材料展示图铜箔、镀金铜、铝合金等金属材料,凭借优异的导电、导热及机械性能,在半导体、消费电子等众多领域扮演着关键角色。然而,随着器件向轻薄化、集成化方向加速演进,传统金属加工工艺在精度、效率及质量等方面逐渐显露…

2026/10/11 4:59:29 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 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/10 5:23:50 阅读更多 →
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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/10 10:38:42 阅读更多 →