Python全栈项目--智能远程医疗系统
2026/6/6 9:29:55 网站建设 项目流程

一、项目简介

随着互联网医院、家庭医生和慢病随访场景的发展,传统线下就诊正在逐步与线上医疗服务融合。本项目实现一个轻量级的智能远程医疗系统:患者可以在线建档并提交远程预约,医生可以查看问诊请求、进入模拟视频诊室、更新问诊状态、填写诊断结论和电子处方。

项目定位是 CSDN 教学型 Python 全栈项目,重点展示从数据库建模、后端接口、前端交互到部署运行的完整流程。为了便于读者本地运行,技术栈选择 FastAPI + SQLite + 原生 HTML/CSS/JavaScript,不依赖复杂前端框架,也不强制连接第三方音视频服务。

系统核心能力包括:

  • 患者档案管理:姓名、年龄、联系方式、地址、既往病史。
  • 在线医生列表:科室、职称、在线状态和擅长方向。
  • 远程预约问诊:选择患者、医生、时间并提交症状描述。
  • 问诊状态流转:待接诊、问诊中、已完成。
  • 远程诊室编号:创建预约时自动生成模拟视频房间号。
  • 诊断与电子处方:医生完成问诊后填写诊断和处方。
  • 数据看板:统计患者数、医生数、预约数、待接诊数和已完成数。

二、技术栈

层次技术说明
后端框架FastAPI提供 RESTful API 和 Swagger 文档
ASGI 服务Uvicorn本地运行 FastAPI 服务
数据库SQLite轻量级文件数据库,便于演示
ORMSQLAlchemy定义数据表、关系和查询逻辑
数据校验Pydantic请求和响应结构校验
前端HTML/CSS/JavaScript原生页面,无需打包工具
通信方式Fetch API浏览器调用后端接口

三、系统架构

项目采用经典前后端分离架构:

浏览器前端 ├── 患者建档表单 ├── 预约问诊表单 ├── 医生列表 └── 问诊状态操作 │ fetch JSON ▼ FastAPI 后端 ├── main.py:接口路由 ├── schemas.py:请求响应模型 ├── crud.py:业务逻辑 ├── models.py:数据库模型 └── database.py:SQLite 连接 │ SQLAlchemy ▼ SQLite 数据库 telemedicine.db

前端只负责展示和用户交互,后端负责数据校验、业务状态更新和持久化。SQLite 数据库文件在后端首次启动时自动创建。

四、功能模块

1. 患者档案模块

患者是远程问诊流程的起点。系统支持创建和查询患者档案,字段包括姓名、年龄、性别、手机号、地址和既往病史。

2. 医生资源模块

医生数据包含姓名、科室、职称、在线状态和擅长方向。项目启动时会自动初始化 3 条医生数据,方便直接测试预约流程。

3. 远程预约模块

患者选择在线医生并填写预约时间、症状描述后,后端创建一条预约记录,同时自动生成一个模拟视频诊室编号,例如RM-1-2

4. 问诊状态模块

预约记录的状态支持:

  • 待接诊:患者刚提交预约。
  • 问诊中:医生点击开始问诊。
  • 已完成:医生填写诊断和处方后结束问诊。

5. 诊断处方模块

问诊完成时,医生可以录入诊断结果和电子处方。真实医疗系统还需要签名、审方、处方流转等合规能力,本项目保留为教学演示。

6. 数据看板模块

看板接口汇总患者数、医生数、预约数、待接诊数、已完成数以及科室分布,帮助管理人员快速了解平台运行状态。

五、数据库/数据模型设计

系统包含 3 张核心表:

patients 患者表

字段类型说明
idInteger主键
nameString姓名
ageInteger年龄
genderString性别
phoneString手机号
addressString地址
historyText既往病史
created_atDateTime创建时间

doctors 医生表

字段类型说明
idInteger主键
nameString医生姓名
departmentString科室
titleString职称
online_statusString在线状态
expertiseText擅长方向

appointments 预约问诊表

字段类型说明
idInteger主键
patient_idInteger患者 ID
doctor_idInteger医生 ID
scheduled_timeString预约时间
symptomText症状描述
statusString问诊状态
video_roomString模拟远程诊室编号
diagnosisText诊断结论
prescriptionText电子处方
created_atDateTime创建时间

模型代码位于backend/app/models.py

classAppointment(Base):__tablename__="appointments"id=Column(Integer,primary_key=True,index=True)patient_id=Column(Integer,ForeignKey("patients.id"),nullable=False)doctor_id=Column(Integer,ForeignKey("doctors.id"),nullable=False)scheduled_time=Column(String(40),nullable=False)symptom=Column(Text,nullable=False)status=Column(String(20),default="待接诊")video_room=Column(String(80),default="")diagnosis=Column(Text,default="")prescription=Column(Text,default="")

六、后端接口设计

接口统一使用/api前缀:

方法路径说明
GET/api/health健康检查
GET/api/dashboard获取统计看板
POST/api/patients创建患者
GET/api/patients查询患者列表
POST/api/doctors创建医生
GET/api/doctors查询医生列表
POST/api/appointments创建远程预约
GET/api/appointments查询预约列表,可按状态过滤
PATCH/api/appointments/{id}更新问诊状态、诊断、处方

预约创建接口示例:

POST/api/appointments{"patient_id":1,"doctor_id":2,"scheduled_time":"2026-06-05T10:30","symptom":"发热、咳嗽两天,希望远程问诊"}

后端会返回带有video_room的预约记录。

七、前端页面设计

前端页面位于frontend/

  • index.html:页面结构,包含数据卡片、患者表单、预约表单、医生列表和问诊列表。
  • style.css:响应式布局和卡片式 UI。
  • app.js:调用后端 API,处理表单提交和状态更新。

页面主要区域如下:

  1. 顶部 Banner:展示系统名称和刷新按钮。
  2. 数据看板:展示患者数、医生数、预约数等统计指标。
  3. 患者建档:录入基础健康档案。
  4. 远程预约:选择患者、医生和预约时间。
  5. 在线医生:展示科室、职称、在线状态、擅长方向。
  6. 问诊列表:支持开始问诊、完成问诊并填写诊断处方。

八、核心代码讲解

1. 数据库连接

database.py使用 SQLite 文件数据库,并通过SessionLocal为每个请求提供数据库会话:

engine=create_engine(DATABASE_URL,connect_args={"check_same_thread":False})SessionLocal=sessionmaker(autocommit=False,autoflush=False,bind=engine)Base=declarative_base()

2. FastAPI 路由

main.py在启动时创建表结构,并注册跨域中间件,方便本地 HTML 页面直接访问接口:

Base.metadata.create_all(bind=engine)app=FastAPI(title="智能远程医疗系统")app.add_middleware(CORSMiddleware,allow_origins=["*"],allow_methods=["*"],allow_headers=["*"])

创建预约的接口非常简洁:

@app.post("/api/appointments",response_model=schemas.Appointment)defcreate_appointment(data:schemas.AppointmentCreate,db:Session=Depends(get_db)):returncrud.create_appointment(db,data)

3. 业务逻辑

crud.py中的create_appointment负责生成远程诊室编号并保存预约:

defcreate_appointment(db:Session,data:schemas.AppointmentCreate):room=f"RM-{data.patient_id}-{data.doctor_id}"appointment=models.Appointment(**data.model_dump(),video_room=room)db.add(appointment)db.commit()db.refresh(appointment)returnappointment

4. 前端交互

前端使用 Fetch API 封装统一请求方法:

asyncfunctionrequest(path,options={}){constres=awaitfetch(`${API}${path}`,{headers:{'Content-Type':'application/json'},...options,});if(!res.ok)thrownewError(awaitres.text());returnres.json();}

更新问诊状态时,前端调用 PATCH 接口:

awaitrequest(`/appointments/${id}`,{method:'PATCH',body:JSON.stringify({status:'问诊中'})});

九、部署与运行步骤

1. 解压项目

unzip76_fullstack_project.zipcdproject

2. 启动后端

cdbackend python3-mvenv .venvsource.venv/bin/activate pipinstall-rrequirements.txt uvicorn app.main:app--reload--host127.0.0.1--port8000

后端启动后可以访问:

  • http://127.0.0.1:8000/docs
  • http://127.0.0.1:8000/api/health

3. 打开前端

方式一:直接双击或浏览器打开frontend/index.html

方式二:在项目根目录启动静态服务:

python3-mhttp.server8080

然后访问:

http://127.0.0.1:8080/frontend/

4. 测试流程

  1. 新建一个患者档案。
  2. 选择患者和医生,填写症状并提交预约。
  3. 在问诊列表点击“开始问诊”。
  4. 点击“完成并开方”,录入诊断和处方。
  5. 查看统计看板是否同步更新。

十、项目总结

本文完成了一个可运行的 Python 全栈项目——智能远程医疗系统。项目虽然轻量,但覆盖了全栈开发中的关键环节:数据建模、接口设计、业务逻辑、前端页面、跨域访问、SQLite 持久化和本地部署。

如果继续扩展,可以加入以下功能:

  • 用户登录、角色权限和 JWT 鉴权。
  • 医生排班、号源管理和预约冲突校验。
  • WebRTC 或第三方 SDK 实现真实音视频问诊。
  • 检验报告上传、图片病历识别和 AI 辅助分诊。
  • 处方审核、电子签名和审计日志。
  • Docker Compose 部署和 Nginx 反向代理。

通过这个项目,你可以快速掌握 FastAPI 全栈项目的基本组织方式,并进一步拓展为更完整的互联网医疗平台。

项目代码

下载链接

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询