在开始编写代码之前,我们需要先配置好本地开发环境。为了确保零门槛落地,本教程选用 Python 作为后端语言,因为它语法简洁,且拥有强大的内置库支持。我们将使用 Flask 框架来搭建 Web 服务,使用 SQLite 作为数据库,因为 SQLite 是文件型数据库,无需安装额外的数据库服务,非常适合轻量级的诊所管理系统。
请确保你的电脑上已经安装了 Python(建议版本 3.8 及以上)。打开终端(Windows 下为 CMD 或 PowerShell,Mac 下为 Terminal),输入以下命令检查版本:
python --version
确认安装无误后,我们需要安装 Flask。在终端中执行以下命令:
pip install flask
接下来,创建一个项目文件夹。在终端中执行:
mkdir clinic_manager
cd clinic_manager
为了保持项目结构清晰,我们在项目根目录下创建一个名为 templates 的文件夹,用于存放 HTML 前端文件:
mkdir templates
至此,环境准备工作全部完成,接下来的所有操作都将在这个 clinic_manager 目录下进行。
诊所档案管理的核心是数据的存储与检索。我们需要设计一张患者信息表,包含以下关键字段:患者姓名、身份证号、联系电话、就诊日期、主诉病情、诊断结果以及备注信息。
为了方便管理,我们将数据库的初始化逻辑直接写在 Python 脚本中。在项目根目录下新建一个名为 app.py 的文件,并输入以下代码。这段代码不仅包含了 Web 服务的启动逻辑,还包含了自动创建数据库表的功能。
请确保你的 app.py 文件内容如下(请直接复制,不要遗漏任何标点符号):
```python
import sqlite3
from flask import Flask, render_template, request, g, redirect, url_for, flash
app = Flask(__name__)
app.secret_key = 'dev_key_for_clinic_manager' 用于Flash消息加密
DATABASE = 'clinic.db'
获取数据库连接
def get_db():
db = getattr(g, '_database', None)
if db is None:
db = g._database = sqlite3.connect(DATABASE)
db.row_factory = sqlite3.Row 让查询结果可以通过列名访问
return db
关闭数据库连接
@app.teardown_appcontext
def close_connection(exception):
db = getattr(g, '_database', None)
if db is not None:
db.close()
初始化数据库表
def init_db():
with app.app_context():
db = get_db()
db.execute('''
CREATE TABLE IF NOT EXISTS patients (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
id_card TEXT,
phone TEXT NOT NULL,
visit_date TEXT NOT NULL,
complaint TEXT,
diagnosis TEXT,
notes TEXT
)
''')
db.commit()
print("数据库初始化完成。")
if __name__ == '__main__':
init_db()
app.run(debug=True, port=5000)
```
这段代码定义了数据库的连接方式,并创建了一个名为 patients 的表。id 为自增主键,visit_date 使用文本类型存储日期字符串,以简化处理流程。保存文件后,我们在终端运行一次该脚本以生成数据库文件:
python app.py
当看到提示“数据库初始化完成。”且服务启动后,按 Ctrl + C 停止服务。此时,你的文件夹下应该已经生成了一个 clinic.db 文件。

现在我们需要为系统添加增删改查(CRUD)的后端接口。继续编辑 app.py,在 if __name__ == '__main__': 之前添加以下路由逻辑。这些路由负责处理前端发来的请求并与数据库交互。
添加首页路由,用于展示所有患者档案列表:
```python
首页:展示患者列表
@app.route('/')
def index():
db = get_db()
按就诊日期降序排列
patients = db.execute('SELECT FROM patients ORDER BY visit_date DESC').fetchall()
return render_template('index.html', patients=patients)
```
添加新增患者档案的路由。这里支持 GET 和 POST 请求,GET 用于显示表单,POST 用于提交数据:
```python
新增患者
@app.route('/add', methods=['GET', 'POST'])
def add_patient():
if request.method == 'POST':
name = request.form['name']
id_card = request.form['id_card']
phone = request.form['phone']
visit_date = request.form['visit_date']
complaint = request.form['complaint']
diagnosis = request.form['diagnosis']
notes = request.form['notes']
db = get_db()
db.execute('INSERT INTO patients (name, id_card, phone, visit_date, complaint, diagnosis, notes) VALUES (?, ?, ?, ?, ?, ?, ?)',
(name, id_card, phone, visit_date, complaint, diagnosis, notes))
db.commit()
flash('患者档案添加成功!')
return redirect(url_for('index'))
return render_template('add.html')
```
接着,添加删除档案的路由:
```python
删除患者
@app.route('/delete/
def delete_patient(patient_id):
db = get_db()
db.execute('DELETE FROM patients WHERE id = ?', (patient_id,))
db.commit()
flash('患者档案已删除。')
return redirect(url_for('index'))
```
添加编辑档案的路由。编辑逻辑比新增稍微复杂,需要先查询出旧数据填充表单,再处理更新操作:
```python
编辑患者
@app.route('/edit/
def edit_patient(patient_id):
db = get_db()
patient = db.execute('SELECT FROM patients WHERE id = ?', (patient_id,)).fetchone()
if request.method == 'POST':
name = request.form['name']
id_card = request.form['id_card']
phone = request.form['phone']
visit_date = request.form['visit_date']
complaint = request.form['complaint']
diagnosis = request.form['diagnosis']
notes = request.form['notes']
db.execute('UPDATE patients SET name=?, id_card=?, phone=?, visit_date=?, complaint=?, diagnosis=?, notes=? WHERE id=?',
(name, id_card, phone, visit_date, complaint, diagnosis, notes, patient_id))
db.commit()
flash('患者档案更新成功!')
return redirect(url_for('index'))
return render_template('edit.html', patient=patient)
```
至此,后端逻辑已全部完成。请确保 app.py 文件结构完整,没有语法错误。
为了实现零门槛操作,我们将使用 Bootstrap 5 框架来快速构建美观的界面。Bootstrap 是一个流行的前端框架,我们只需要通过 CDN 引入即可,无需下载任何 CSS 或 JS 文件。
我们需要在 templates 文件夹下创建三个 HTML 文件:index.html(列表页)、add.html(新增页)和 edit.html(编辑页)。
首先创建 templates/index.html,这是系统的主界面,包含数据表格和操作按钮:
```html
| 姓名 | 身份证号 | 联系电话 | 就诊日期 | 诊断结果 | 操作 |
|---|---|---|---|---|---|
| {{ patient.name }} | {{ patient.id_card }} | {{ patient.phone }} | {{ patient.visit_date }} | {{ patient.diagnosis }} | 编辑 删除 |
| 暂无档案数据 | |||||
接下来创建 templates/add.html,用于录入新患者信息:
```html
最后创建 templates/edit.html,其结构与新增页面类似,但需要在输入框中预填充已有数据。注意 value 属性的使用:
```html