环境准备与依赖安装
在开始构建西医医院档案软件之前,必须先配置好基础的开发环境。本系统采用 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 模板文件)
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 时,说明服务已成功启动。打开浏览器,访问上述地址。
功能验证步骤:
新增档案: 点击页面左上角的“+ 新增档案”按钮,填写患者姓名、性别、年龄、科室(如“呼吸内科”)、诊断结果及入院日期,点击保存。观察列表是否立即刷新出新增的数据。
数据展示: 检查表格中的数据是否与输入一致,特别是日期格式和长文本的诊断结果是否显示完整。
删除功能: 点击列表某行的“删除”按钮,确认弹窗后,该行数据应当从界面中消失且无法恢复。
持久化验证: 关闭浏览器和终端,重启服务(再次运行 python app.py),刷新页面,确认之前录入的数据依然存在。这证明了 SQLite 数据库存储逻辑的正确性。
至此,一个基于 Python Flask 和 SQLite 的西医医院档案管理系统已经完全搭建完成。该系统具备了基础的 CRUD(增删改查)能力,代码结构清晰,无需任何复杂的配置即可运行,非常适合作为小型诊所的内部管理工具或进一步开发的脚手架。