手把手教你用Python Flask开发诊所档案管理系统

环境准备与项目初始化

在开始构建诊所档案管理系统之前,我们需要搭建一个轻量级且高效的开发环境。本系统采用Python作为后端语言,Flask作为Web框架,SQLite作为数据库。这种组合无需复杂的服务器配置,非常适合快速落地。

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

```bash python --version ```

接下来,我们在本地创建一个项目目录,并建立独立的虚拟环境以隔离依赖包。执行以下命令:

```bash mkdir clinic_system cd clinic_system python -m venv venv ```

虚拟环境创建完成后,需要根据操作系统激活它。在Windows系统下,执行:

```bash venv\Scripts\activate ```

在Linux或macOS系统下,执行:

```bash source venv/bin/activate ```

激活环境后,安装Flask框架。为了确保后续能顺利连接数据库,我们一并安装Flask所需的依赖:

```bash pip install Flask ```

至此,基础环境搭建完毕。为了保持项目结构清晰,建议在项目根目录下创建以下文件夹结构:

  • clinic_system/ (项目根目录)
  • instance/ (用于存放SQLite数据库文件)
  • templates/ (用于存放HTML模板文件)
  • static/ (用于存放CSS、JS等静态文件)

数据库设计与初始化

诊所档案软件的核心在于对病人信息的结构化存储。我们需要设计一张包含基础信息、就诊记录等关键数据的表。在项目根目录下创建一个名为 schema.sql 的文件,并写入以下SQL语句:

```sql DROP TABLE IF EXISTS patients; CREATE TABLE patients ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, gender TEXT NOT NULL, age INTEGER NOT NULL, phone TEXT NOT NULL, address TEXT, medical_history TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ```

这段SQL定义了 patients 表,包含自增ID、姓名、性别、年龄、电话、地址、病史以及创建时间。为了方便初始化数据库,我们在根目录下创建一个名为 init_db.py 的Python脚本:

```python import sqlite3 connection = sqlite3.connect('instance/clinic.db') with open('schema.sql') as f: connection.executescript(f.read()) cur = connection.cursor() cur.execute("INSERT INTO patients (name, gender, age, phone, address, medical_history) VALUES (?, ?, ?, ?, ?, ?)", ('张三', '男', 35, '13800138000', '北京市朝阳区', '无') ) cur.execute("INSERT INTO patients (name, gender, age, phone, address, medical_history) VALUES (?, ?, ?, ?, ?, ?)", ('李四', '女', 28, '13900139000', '上海市海淀区', '高血压') ) connection.commit() connection.close() ```

保存文件后,在终端执行以下命令完成数据库的初始化及测试数据的插入:

```bash python init_db.py ```

执行成功后,instance 文件夹下将生成一个 clinic.db 文件,这便是我们的数据库文件。

后端核心逻辑编写

后端主要负责处理HTTP请求并与数据库进行交互。在根目录下创建 app.py 文件,这是整个应用的入口。我们将实现档案的列表展示、新增、编辑和删除功能。

引入必要的库并配置数据库连接:

```python import sqlite3 from flask import Flask, render_template, request, url_for, flash, redirect app = Flask(__name__) app.config['SECRET_KEY'] = 'your_secret_key_here' def get_db_connection(): conn = sqlite3.connect('instance/clinic.db') conn.row_factory = sqlite3.Row return conn ```

手把手教你用Python Flask开发诊所档案管理系统

get_db_connection 函数用于建立数据库连接,并设置 row_factorysqlite3.Row,这样我们可以像字典一样通过列名访问数据。

接下来,编写首页路由,用于展示所有病人档案:

```python @app.route('/') def index(): conn = get_db_connection() patients = conn.execute('SELECT FROM patients').fetchall() conn.close() return render_template('index.html', patients=patients) ```

实现新增档案的路由。这里需要处理GET请求(显示表单)和POST请求(提交数据):

```python @app.route('/create', methods=('GET', 'POST')) def create(): if request.method == 'POST': name = request.form['name'] gender = request.form['gender'] age = request.form['age'] phone = request.form['phone'] address = request.form['address'] medical_history = request.form['medical_history'] if not name: flash('姓名是必填项!') else: conn = get_db_connection() conn.execute('INSERT INTO patients (name, gender, age, phone, address, medical_history) VALUES (?, ?, ?, ?, ?, ?)', (name, gender, age, phone, address, medical_history)) conn.commit() conn.close() return redirect(url_for('index')) return render_template('create.html') ```

为了实现编辑功能,我们需要一个带有ID参数的路由:

```python @app.route('//edit', methods=('GET', 'POST')) def edit(id): conn = get_db_connection() patient = conn.execute('SELECT FROM patients WHERE id = ?', (id,)).fetchone() conn.close() if request.method == 'POST': name = request.form['name'] gender = request.form['gender'] age = request.form['age'] phone = request.form['phone'] address = request.form['address'] medical_history = request.form['medical_history'] if not name: flash('姓名是必填项!') else: conn = get_db_connection() conn.execute('UPDATE patients SET name = ?, gender = ?, age = ?, phone = ?, address = ?, medical_history = ?' ' WHERE id = ?', (name, gender, age, phone, address, medical_history, id)) conn.commit() conn.close() return redirect(url_for('index')) return render_template('edit.html', patient=patient) ```

添加删除功能的路由:

```python @app.route('//delete', methods=('POST',)) def delete(id): conn = get_db_connection() conn.execute('DELETE FROM patients WHERE id = ?', (id,)) conn.commit() conn.close() return redirect(url_for('index')) ```

前端页面与交互实现

为了快速构建美观的界面,我们使用Bootstrap 5 CDN,这样无需下载任何CSS或JS文件。在 templates 目录下创建基础模板 base.html

```html {% block title %} {% endblock %} - 诊所档案系统
{% for message in get_flashed_messages() %}
{{ message }}
{% endfor %} {% block content %} {% endblock %}
```

接着,创建首页 index.html,用于展示病人列表:

```html {% extends 'base.html' %} {% block title %} 档案列表 {% endblock %} {% block content %} 病人档案列表
新增档案 {% for patient in patients %} {% endfor %}
ID 姓名 性别 年龄 电话 地址 病史 操作
{{ patient['id'] }} {{ patient['name'] }} {{ patient['gender'] }} {{ patient['age'] }} {{ patient['phone'] }} {{ patient['address'] }} {{ patient['medical_history'] }} 编辑
{% endblock %} ```

创建新增页面 create.html

```html {% extends 'base.html' %} {% block title %} 新增档案 {% endblock %} {% block content %} 新增病人档案
返回
{% endblock %} ```

创建编辑页面 edit.html,其表单结构与新增页面类似,但需要预填充数据:

```html {% extends 'base.html' %} {% block title %} 编辑档案 {% endblock %} {% block content %} 编辑病人档案 ({{ patient['name'] }})
返回
{% endblock %} ```

运行测试与功能验证

所有代码编写完毕后,即可启动系统进行测试。确保终端仍处于虚拟环境激活状态,并在项目根目录下执行以下命令启动Flask开发服务器:

```bash flask run ```

或者使用python命令启动:

```bash python -m flask run ```

终端会显示服务运行地址,通常是 http://127.0.0.1:5000。打开浏览器访问该地址。

验证步骤:

  1. 查看列表: 首页应加载初始化的两条测试数据(张三、李四)。
  2. 新增档案: 点击“新增档案”按钮,填写表单并提交,确认新数据出现在列表中且数据库已更新。
  3. 编辑档案: 点击某条记录的“编辑”按钮,修改年龄或电话,保存后检查列表是否实时更新。
  4. 删除档案: 点击“删除”按钮,确认弹窗提示,确认后该条记录应从列表中移除。

至此,一个具备完整CRUD(增删改查)功能的诊所档案管理系统已经完全落地。该系统结构清晰,代码逻辑简单,非常适合作为小型诊所的数字化管理工具或进一步扩展的基础。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

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

微信扫码关注安答联动

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

安答联动档案管理系统