网站首页/ 信息中心/ 档案百科/

手把手教你搭建档案交流会培训报名系统

发布时间:2026年08月17日 11:05:19 浏览量:0

环境准备与依赖安装

在开始编写代码之前,我们需要确保本地开发环境已经配置妥当。本系统基于 Python 3.8+ 版本开发,利用 Flask 框架处理 Web 请求,使用 SQLite 作为轻量级数据库,并利用 Pandas 进行数据导出处理。请打开终端或命令行工具,依次执行以下操作。

确认 Python 版本是否满足要求,输入以下命令检查:

```bash python --version ```

接着,创建一个名为 archive_training_system 的项目文件夹,并进入该目录:

```bash mkdir archive_training_system cd archive_training_system ```

在项目根目录下,我们需要安装必要的第三方库。执行以下 pip 安装命令,请确保网络连接畅通:

```bash pip install flask pandas openpyxl ```

注意:openpyxl 是用于处理 Excel 文件的依赖库,必须安装,否则后续导出报名名单功能会报错。

项目目录结构设计

为了保证代码的可维护性,我们采用简单的 MVC 结构组织文件。请在当前目录下创建以下文件和文件夹结构:

数据库设计与初始化

我们需要一个数据表来存储参会人员的详细信息。打开 init_db.py 文件,写入以下代码。这段代码将建立一个名为 registrations 的表,包含姓名、单位、电话、邮箱等核心字段,并设置主键 ID 和创建时间。

```python import sqlite3 def init_db(): 连接到SQLite数据库文件,如果不存在会自动创建 conn = sqlite3.connect('training.db') cursor = conn.cursor() 创建报名表 cursor.execute(''' CREATE TABLE IF NOT EXISTS registrations ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, organization TEXT NOT NULL, phone TEXT NOT NULL, email TEXT NOT NULL, job_title TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ''') conn.commit() conn.close() print("数据库初始化完成,数据表 registrations 已创建。") if __name__ == '__main__': init_db() ```

保存文件后,在终端执行以下命令生成数据库:

```bash python init_db.py ```

执行成功后,文件夹内会出现 training.db 文件。

后端核心逻辑开发

接下来是系统的核心部分。我们将编写 Flask 应用,处理表单提交、数据校验、重复报名检测以及 Excel 导出功能。打开 app.py,完整代码如下:

```python import sqlite3 import os from flask import Flask, render_template, request, redirect, url_for, flash, send_file import pandas as pd from datetime import datetime app = Flask(__name__) app.secret_key = 'your_secret_key_here_change_in_production' 用于Flash消息 DATABASE = 'training.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('/submit', methods=['POST']) def submit(): 获取表单数据 name = request.form.get('name') organization = request.form.get('organization') phone = request.form.get('phone') email = request.form.get('email') job_title = request.form.get('job_title') 基础非空校验 if not all([name, organization, phone, email]): flash('请填写所有必填项(姓名、单位、电话、邮箱)。', 'error') return redirect(url_for('index')) conn = get_db_connection() try: 检查电话号码是否已报名,防止重复 cursor = conn.cursor() cursor.execute('SELECT id FROM registrations WHERE phone = ?', (phone,)) if cursor.fetchone(): flash('该电话号码已经报名过,请勿重复提交。', 'error') return redirect(url_for('index')) 插入数据 cursor.execute(''' INSERT INTO registrations (name, organization, phone, email, job_title) VALUES (?, ?, ?, ?, ?) ''', (name, organization, phone, email, job_title)) conn.commit() flash('报名成功!我们将通过邮件或短信通知具体培训地点。', 'success') except Exception as e: conn.rollback() flash(f'系统错误:{str(e)}', 'error') finally: conn.close() return redirect(url_for('index')) @app.route('/admin') def admin(): conn = get_db_connection() 按照时间倒序查询所有报名数据 registrations = conn.execute('SELECT FROM registrations ORDER BY created_at DESC').fetchall() conn.close() return render_template('admin.html', registrations=registrations) @app.route('/export') def export(): conn = get_db_connection() 查询数据 data = conn.execute('SELECT name, organization, phone, email, job_title, created_at FROM registrations').fetchall() conn.close() if not data: flash('当前没有数据可导出。', 'error') return redirect(url_for('admin')) 转换为DataFrame df = pd.DataFrame(data, columns=['姓名', '单位', '电话', '邮箱', '职务', '报名时间']) 生成文件名 filename = f"档案交流会报名名单_{datetime.now().strftime('%Y%m%d%H%M%S')}.xlsx" output_path = os.path.join(os.getcwd(), filename) 导出Excel df.to_excel(output_path, index=False) return send_file(output_path, as_attachment=True, download_name=filename) if __name__ == '__main__': app.run(debug=True, port=5000) ```

代码解析:/submit 路由中,我们加入了防重复逻辑,通过查询手机号判断是否已存在;在 /export 路由中,利用 Pandas 将查询结果直接转换为 Excel 流并下载,方便后续培训会务组使用。

前端页面构建

为了确保页面美观且无需编写复杂的 CSS,我们直接使用 Bootstrap 5 的 CDN 版本。请在 templates 文件夹下创建以下两个 HTML 文件。

1. 前台报名页面 (index.html)

手把手教你搭建档案交流会培训报名系统

这个页面包含一个清晰的报名表单,用于收集用户信息。

```html 档案交流会培训报名

档案交流会培训报名

{% with messages = get_flashed_messages(with_categories=true) %} {% if messages %} {% for category, message in messages %} {% endfor %} {% endif %} {% endwith %}
```

2. 后台管理页面 (admin.html)

该页面用于展示已报名人员列表,并提供“导出 Excel”按钮。

```html 后台管理 - 报名列表

档案交流会 - 报名人员管理

导出 Excel 名单
{% if registrations %} {% for reg in registrations %} {% endfor %} {% else %} {% endif %}
ID 姓名 单位 电话 邮箱 职务 报名时间
{{ reg.id }} {{ reg.name }} {{ reg.organization }} {{ reg.phone }} {{ reg.email }} {{ reg.job_title }} {{ reg.created_at }}
暂无报名数据
```

系统运行与测试

至此,所有代码已编写完毕。现在我们将启动服务并进行功能测试。

在终端执行以下命令启动 Flask 应用:

```bash python app.py ```

终端显示 Running on http://127.0.0.1:5000 即表示启动成功。

测试步骤 1:提交报名数据

打开浏览器,访问 http://127.0.0.1:5000。你将看到报名表单。输入以下测试数据:

点击“立即报名”按钮。页面应刷新并显示绿色的成功提示框:“报名成功!我们将通过邮件或短信通知具体培训地点。”

测试步骤 2:验证防重复机制

在刚才的页面,再次点击“立即报名”(保持电话号码不变)。这次页面应显示红色的错误提示:“该电话号码已经报名过,请勿重复提交。”这确保了数据的唯一性。

测试步骤 3:查看后台与导出

在浏览器地址栏输入 http://127.0.0.1:5000/admin。你将看到刚才提交的“张三”的数据列表。

点击右上角的绿色按钮“导出 Excel 名单”。浏览器将自动下载一个名为 档案交流会报名名单_时间戳.xlsx 的文件。打开该 Excel 文件,确认数据格式正确,包含表头和刚才录入的信息。

部署与生产环境建议

以上步骤完成了本地开发环境的搭建。如果需要将此系统发布到公网供实际使用,建议关注以下两点:

1. 安全性配置:app.py 中,务必修改 app.secret_key 为一个复杂的随机字符串,不要使用代码中的默认值。同时,在生产环境中应关闭 debug 模式,即设置 app.run(debug=False)

2. 服务器部署: 推荐使用 Gunicorn 或 uWSGI 配合 Nginx 来运行 Flask 应用,而不是直接使用 python app.py,这样可以获得更好的并发性能和稳定性。对于 SQLite 数据库,在高并发写入场景下建议替换为 PostgreSQL 或 MySQL。

太原档案数字化服务流程是怎样的?大概需要多少钱?
太原档案数字化服务流程是怎样的?大概需要多少钱?
太原档案数字化服务通常包含需求分析、方案制定、现场整理、扫描加工、数据挂接、验收交付等核心流程,费用根据档案数量、纸张状况、数字化标准等因素综合计算,2026年市场价格范围大致在每页0.5元至2元之间...
2026年08月17日 11:05:19
微信咨询
电话联系
QQ客服
微信咨询一对一服务
服务热线: 028-8744 4417
QQ客服: 2305721818