Python全栈项目--智能远程医疗系统

一、项目简介

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

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

系统核心能力包括:

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

二、技术栈

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

三、系统架构

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

text 复制代码
浏览器前端
  ├── 患者建档表单
  ├── 预约问诊表单
  ├── 医生列表
  └── 问诊状态操作
        │ 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 患者表

字段 类型 说明
id Integer 主键
name String 姓名
age Integer 年龄
gender String 性别
phone String 手机号
address String 地址
history Text 既往病史
created_at DateTime 创建时间

doctors 医生表

字段 类型 说明
id Integer 主键
name String 医生姓名
department String 科室
title String 职称
online_status String 在线状态
expertise Text 擅长方向

appointments 预约问诊表

字段 类型 说明
id Integer 主键
patient_id Integer 患者 ID
doctor_id Integer 医生 ID
scheduled_time String 预约时间
symptom Text 症状描述
status String 问诊状态
video_room String 模拟远程诊室编号
diagnosis Text 诊断结论
prescription Text 电子处方
created_at DateTime 创建时间

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

python 复制代码
class Appointment(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} 更新问诊状态、诊断、处方

预约创建接口示例:

json 复制代码
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 为每个请求提供数据库会话:

python 复制代码
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 页面直接访问接口:

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

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

python 复制代码
@app.post("/api/appointments", response_model=schemas.Appointment)
def create_appointment(data: schemas.AppointmentCreate, db: Session = Depends(get_db)):
    return crud.create_appointment(db, data)

3. 业务逻辑

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

python 复制代码
def create_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)
    return appointment

4. 前端交互

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

javascript 复制代码
async function request(path, options = {}) {
  const res = await fetch(`${API}${path}`, {
    headers: { 'Content-Type': 'application/json' },
    ...options,
  });
  if (!res.ok) throw new Error(await res.text());
  return res.json();
}

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

javascript 复制代码
await request(`/appointments/${id}`, {
  method: 'PATCH',
  body: JSON.stringify({ status: '问诊中' })
});

九、部署与运行步骤

1. 解压项目

bash 复制代码
unzip 76_fullstack_project.zip
cd project

2. 启动后端

bash 复制代码
cd backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload --host 127.0.0.1 --port 8000

后端启动后可以访问:

3. 打开前端

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

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

bash 复制代码
python3 -m http.server 8080

然后访问:

text 复制代码
http://127.0.0.1:8080/frontend/

4. 测试流程

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

十、项目总结

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

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

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

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

项目代码

下载链接

相关推荐
源分享6 分钟前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.15 分钟前
C语言--day30
c语言·开发语言
码云骑士25 分钟前
32-慢查询排查全流程(下)-索引优化实战与最左前缀原则
python
何以解忧,唯有..32 分钟前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
謓泽40 分钟前
C语言不是语法,是通往机器的地图。
c语言·开发语言
云水一下42 分钟前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
飞天狗1111 小时前
零基础JavaWeb入门——第五课第二小节:九大内置对象 · 第2个:response(响应对象)
java·开发语言
DJ斯特拉1 小时前
axios快速使用
开发语言·前端·javascript
xingpanvip1 小时前
星盘接口开发文档:本命盘接口指南
android·开发语言·css·php·lua