一、环境准备与依赖安装
在开始编写代码之前,我们需要配置好Python开发环境。本系统基于轻量级Web框架Flask开发,无需配置复杂的服务器环境,适合快速落地。
请确保你的系统中已安装Python 3.8及以上版本。打开终端或命令提示符,输入以下命令检查Python版本:
python --version
为了保持项目环境的独立性,我们需要创建一个虚拟环境。在项目目录下执行以下命令:
python -m venv venv
激活虚拟环境:
Windows用户: venv\Scripts\activate
Mac/Linux用户: source venv/bin/activate
激活成功后,安装本系统所需的核心依赖包Flask:
pip install flask
至此,基础环境搭建完成。接下来我们将进入核心代码的编写阶段。
二、项目目录结构设计
为了保证代码的可维护性,我们需要建立一个清晰的目录结构。请在你的工作区下创建一个名为的文件夹,并按照以下结构创建子文件夹和文件:
sport_system/ (项目根目录)
static/ (存放CSS、JS等静态文件,本例主要使用CDN,此文件夹暂留空)
templates/ (存放HTML模板文件)
base.html (基础模板)
index.html (列表展示页)
create.html (新增档案页)
edit.html (编辑档案页)
app.py (后端核心逻辑文件)
init_db.py (数据库初始化脚本)
sport.db (SQLite数据库文件,运行后自动生成)
三、数据库设计与初始化
体育部门档案管理系统的核心数据包括人员姓名、所属运动队、职位、入队时间以及联系电话。我们将使用SQLite数据库,因为它无需单独安装数据库服务,零配置即可使用。
创建init_db.py文件,并写入以下代码。这段脚本将负责连接数据库并创建名为athletes的数据表:
```python
import sqlite3
def init_db():
连接到SQLite数据库文件,如果不存在会自动创建
conn = sqlite3.connect('sport.db')
cursor = conn.cursor()
创建athletes表
cursor.execute('''
CREATE TABLE IF NOT EXISTS athletes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
team TEXT NOT NULL,
role TEXT NOT NULL,
join_date TEXT NOT NULL,
phone TEXT
)
''')
提交事务并关闭连接
conn.commit()
conn.close()
print("数据库初始化完成,数据表athletes已创建。")
if __name__ == '__main__':
init_db()
```
保存文件后,在终端中运行以下命令执行初始化:
python init_db.py
执行成功后,项目目录下将生成sport.db文件。
四、后端核心逻辑实现
后端采用Flask框架,主要负责处理HTTP请求、与数据库交互以及渲染HTML页面。打开app.py文件,编写完整的业务逻辑代码:
```python
from flask import Flask, render_template, request, redirect, url_for, flash
import sqlite3
app = Flask(__name__)
app.secret_key = 'dev_secret_key_for_flash_messages' 用于Flash消息的密钥
数据库连接辅助函数
def get_db_connection():
conn = sqlite3.connect('sport.db')
conn.row_factory = sqlite3.Row 允许通过列名访问数据
return conn
首页:展示所有档案列表
@app.route('/')
def index():
conn = get_db_connection()
按ID降序查询,最新的显示在最前面
cursor = conn.execute('SELECT FROM athletes ORDER BY id DESC')
athletes = cursor.fetchall()
conn.close()
return render_template('index.html', athletes=athletes)
新增档案页面
@app.route('/create', methods=('GET', 'POST'))
def create():
if request.method == 'POST':
name = request.form['name']
team = request.form['team']
role = request.form['role']
join_date = request.form['join_date']
phone = request.form['phone']
if not name:
flash('姓名是必填项!')
else:
conn = get_db_connection()
conn.execute('INSERT INTO athletes (name, team, role, join_date, phone) VALUES (?, ?, ?, ?, ?)',
(name, team, role, join_date, phone))
conn.commit()
conn.close()
return redirect(url_for('index'))
return render_template('create.html')
编辑档案页面
@app.route('/
/edit', methods=('GET', 'POST'))
def edit(id):
conn = get_db_connection()
athlete = conn.execute('SELECT FROM athletes WHERE id = ?', (id,)).fetchone()
conn.close()
if request.method == 'POST':
name = request.form['name']
team = request.form['team']
role = request.form['role']
join_date = request.form['join_date']
phone = request.form['phone']
if not name:
flash('姓名是必填项!')
else:
conn = get_db_connection()
conn.execute('UPDATE athletes SET name = ?, team = ?, role = ?, join_date = ?, phone = ? WHERE id = ?',
(name, team, role, join_date, phone, id))
conn.commit()
conn.close()
return redirect(url_for('index'))
return render_template('edit.html', athlete=athlete)
删除档案功能
@app.route('//delete', methods=('POST',))
def delete(id):
conn = get_db_connection()
conn.execute('DELETE FROM athletes WHERE id = ?', (id,))
conn.commit()
conn.close()
return redirect(url_for('index'))
if __name__ == '__main__':
app.run(debug=True)
```
五、前端页面构建
为了确保系统界面整洁且具备响应式布局,我们将使用Bootstrap 5框架。首先创建基础模板templates/base.html,其他页面将继承此模板以保持导航栏一致:
```html
体育部门档案管理系统
{% with messages = get_flashed_messages() %}
{% if messages %}
{{ messages[0] }}
{% endif %}
{% endwith %}
{% block content %}{% endblock %}
```
接下来编写列表展示页templates/index.html,用于展示所有运动员和教练的档案:
```html
{% extends 'base.html' %}
{% block content %}
档案列表
新增档案
ID
姓名
所属队伍
职位
入队时间
联系电话
操作
{% for athlete in athletes %}
{{ athlete['id'] }}
{{ athlete['name'] }}
{{ athlete['team'] }}
{{ athlete['role'] }}
{{ athlete['join_date'] }}
{{ athlete['phone'] }}
编辑
{% else %}
暂无档案数据,请点击上方按钮新增。
{% endfor %}
{% endblock %}
```
编写新增页面templates/create.html,包含一个用于输入信息的表单:
```html
{% extends 'base.html' %}
{% block content %}
新增体育档案
{% endblock %}
```
编写编辑页面templates/edit.html,其结构与新增页面类似,但需要预填充现有数据:
```html
{% extends 'base.html' %}
{% block content %}
编辑档案 (ID: {{ athlete['id'] }})
{% endblock %}
```
六、系统启动与功能验证
所有代码文件已准备就绪,现在启动系统进行测试。确保终端仍处于虚拟环境激活状态,并在项目根目录下执行:
python app.py
当终端显示Running on http://127.0.0.1:5000时,说明服务已成功启动。打开浏览器访问上述地址。
验证步骤如下:
新增数据: 点击页面右上角的“新增档案”按钮,填写姓名(如:张三)、队伍(如:游泳队)、职位、入队时间及电话,点击提交。系统应自动跳转回首页,并显示新添加的数据。
查看数据: 在首页列表中检查刚才录入的信息是否准确显示,表格应具有斑马纹样式。
编辑数据: 点击列表中某条数据的“编辑”按钮,修改姓名或电话号码,点击“更新保存”。确认列表中的数据已实时更新。
删除数据: 点击“删除”按钮,浏览器会弹出确认框。确认后,该条数据应从列表中移除。
至此,一个具备完整增删改查(CRUD)功能的体育部门档案管理系统已成功部署。该系统可以直接用于管理小规模的团队信息,且代码结构清晰,便于后续扩展如用户登录、权限管理或数据导出功能。