手把手教你搭建西医医院档案管理系统全流程

环境准备与依赖安装

在开始构建西医医院档案软件之前,必须先配置好基础的开发环境。本系统采用 Python 的 Flask 框架作为后端,因为其轻量且易于上手;数据库使用 SQLite,无需配置额外的数据库服务,实现真正的零门槛落地。前端使用原生 HTML5 配合 Bootstrap 5 进行快速布局。

请确保你的系统中已经安装了 Python 3.8 或更高版本。打开终端或命令提示符,输入以下命令检查版本:

python --version

确认无误后,我们需要安装 Flask 框架。请在终端中执行以下命令进行安装:

pip install flask

安装完成后,为了处理日期时间和表单数据,我们还需要安装相关的依赖包:

pip install python-dateutil

至此,核心环境准备完毕,接下来我们将进入项目目录的搭建阶段。

项目目录结构初始化

为了保持代码的清晰与可维护性,我们需要建立一个规范的目录结构。请在你的工作目录下创建一个名为 hospital_archive 的主文件夹,并在其中按照以下结构创建子文件夹和文件:

  • hospital_archive/ (项目根目录)
    • static/ (存放 CSS、JS 等静态文件)
    • templates/ (存放 HTML 模板文件)
      • index.html (系统主界面)
    • app.py (后端核心逻辑文件)
    • init_db.py (数据库初始化脚本)
    • hospital.db (SQLite 数据库文件,运行后自动生成)

请确保在开始编写代码前,上述文件夹和空白文件已经创建完毕。特别是 templates 文件夹,Flask 默认会严格从此处读取 HTML 文件。

数据库模型设计与初始化

西医医院档案软件的核心在于对患者病历、诊断结果及个人信息的结构化存储。我们将设计一张包含关键字段的 patients 表。请打开 init_db.py 文件,输入以下完整的数据库初始化代码:

```python import sqlite3 def init_db(): 连接到 SQLite 数据库文件,如果不存在则会自动创建 conn = sqlite3.connect('hospital.db') cursor = conn.cursor() 创建患者档案表 cursor.execute(''' CREATE TABLE IF NOT EXISTS patients ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, gender TEXT NOT NULL, age INTEGER NOT NULL, department TEXT NOT NULL, diagnosis TEXT NOT NULL, admission_date TEXT NOT NULL, notes TEXT ) ''') conn.commit() conn.close() print("数据库初始化完成,表 'patients' 已创建。") if __name__ == '__main__': init_db() ```

保存文件后,在终端中进入项目根目录,执行以下命令生成数据库文件:

手把手教你搭建西医医院档案管理系统全流程

python init_db.py

执行成功后,你会看到“数据库初始化完成”的提示,且目录下会多出一个 hospital.db 文件。这一步建立了系统的数据基石。

后端核心逻辑开发

后端负责处理前端的请求并与数据库进行交互。我们需要实现档案的列表展示、新增和删除功能。请打开 app.py,编写如下代码。这里我们直接提供完整的业务逻辑,包含 CORS 跨域支持(方便后续扩展)和 RESTful 风格的接口设计。

```python import sqlite3 from flask import Flask, render_template, request, jsonify from datetime import datetime app = Flask(__name__) DATABASE = 'hospital.db' def get_db_connection(): conn = sqlite3.connect(DATABASE) conn.row_factory = sqlite3.Row 允许通过列名访问数据 return conn @app.route('/') def index(): 渲染主页面 return render_template('index.html') @app.route('/api/patients', methods=['GET']) def get_patients(): conn = get_db_connection() 按入院时间倒序排列 patients = conn.execute('SELECT FROM patients ORDER BY admission_date DESC').fetchall() conn.close() 将数据库行对象转换为字典列表以便 JSON 序列化 patients_list = [dict(ix) for ix in patients] return jsonify(patients_list) @app.route('/api/patients', methods=['POST']) def add_patient(): data = request.get_json() 获取前端传来的数据 name = data.get('name') gender = data.get('gender') age = data.get('age') department = data.get('department') diagnosis = data.get('diagnosis') admission_date = data.get('admission_date') notes = data.get('notes', '') if not all([name, gender, age, department, diagnosis, admission_date]): return jsonify({'error': '请填写所有必填字段'}), 400 conn = get_db_connection() conn.execute( 'INSERT INTO patients (name, gender, age, department, diagnosis, admission_date, notes) VALUES (?, ?, ?, ?, ?, ?, ?)', (name, gender, age, department, diagnosis, admission_date, notes) ) conn.commit() conn.close() return jsonify({'success': True}) @app.route('/api/patients/', methods=['DELETE']) def delete_patient(patient_id): conn = get_db_connection() conn.execute('DELETE FROM patients WHERE id = ?', (patient_id,)) conn.commit() conn.close() return jsonify({'success': True}) if __name__ == '__main__': 启动服务,开启调试模式以便实时看到代码修改效果 app.run(debug=True, port=5000) ```

这段代码实现了增删改查中最核心的三个功能。注意 get_db_connection 函数中的 row_factory 设置,它能让我们像操作字典一样操作查询结果,极大简化了数据处理流程。

前端界面构建与交互

前端部分我们将使用 Bootstrap 5 来构建一个响应式的管理界面。为了保持单文件便捷性,我们将 CSS 和 JavaScript 直接写在 templates/index.html 中。这个页面包含档案列表展示和新增档案的模态框。

请打开 templates/index.html,输入以下代码:

```html 西医医院档案管理系统

西医医院档案管理

ID 姓名 性别 年龄 科室 诊断结果 入院日期 操作
```

此 HTML 文件是一个完全自包含的页面。通过 Bootstrap 的 Grid 系统,我们将表单布局得整齐有序。JavaScript 部分使用了 Fetch API 来异步调用我们在 app.py 中定义的接口,实现了无刷新的数据操作。

系统启动与功能验证

所有代码已经就绪,现在启动系统进行验证。回到终端,确保当前目录位于 hospital_archive 下,执行以下命令启动 Flask 服务器:

python app.py

当终端显示 Running on http://127.0.0.1:5000 时,说明服务已成功启动。打开浏览器,访问上述地址。

功能验证步骤:

  1. 新增档案: 点击页面左上角的“+ 新增档案”按钮,填写患者姓名、性别、年龄、科室(如“呼吸内科”)、诊断结果及入院日期,点击保存。观察列表是否立即刷新出新增的数据。
  2. 数据展示: 检查表格中的数据是否与输入一致,特别是日期格式和长文本的诊断结果是否显示完整。
  3. 删除功能: 点击列表某行的“删除”按钮,确认弹窗后,该行数据应当从界面中消失且无法恢复。
  4. 持久化验证: 关闭浏览器和终端,重启服务(再次运行 python app.py),刷新页面,确认之前录入的数据依然存在。这证明了 SQLite 数据库存储逻辑的正确性。

至此,一个基于 Python Flask 和 SQLite 的西医医院档案管理系统已经完全搭建完成。该系统具备了基础的 CRUD(增删改查)能力,代码结构清晰,无需任何复杂的配置即可运行,非常适合作为小型诊所的内部管理工具或进一步开发的脚手架。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

扫码咨询
安答联动微信公众号二维码

微信扫码关注安答联动

申请试用
热线电话
申请试用

安答联动档案管理系统