零基础搭建莆田档案培训学员管理系统实操

一、环境准备与依赖安装

在开始构建莆田档案培训学员管理系统之前,必须先配置好Python开发环境。本系统基于Flask轻量级框架开发,使用SQLite作为数据库,无需额外安装数据库服务,适合快速落地。

打开终端或命令提示符,检查Python版本。建议使用Python 3.8及以上版本以确保兼容性。输入以下命令:

```bash python --version ```

接下来,为了防止项目依赖冲突,我们需要创建一个独立的虚拟环境。在项目目录下执行以下命令创建并激活虚拟环境:

```bash Windows系统 python -m venv venv venv\Scripts\activate Linux或MacOS系统 python3 -m venv venv source venv/bin/activate ```

激活虚拟环境后,安装本项目所需的核心依赖包:Flask(Web框架)、Flask-SQLAlchemy(ORM数据库工具)。直接复制以下命令执行:

```bash pip install flask flask-sqlalchemy ```

安装完成后,创建项目根目录文件夹,命名为putian_archives_training,后续所有文件将在此目录下创建。

二、项目目录结构规划

为了保证代码的可维护性,请严格按照以下目录结构创建文件和文件夹。请在putian_archives_training根目录下手动创建templatesstatic文件夹:

  • putian_archives_training/ (项目根目录)
    • app.py (主程序入口)
    • models.py (数据库模型定义)
    • templates/ (HTML模板存放目录)
      • base.html (基础布局模板)
      • index.html (学员列表页)
      • add.html (添加学员页)
      • edit.html (编辑学员页)
    • static/ (静态资源目录,本例暂不涉及)

三、数据库模型设计

创建models.py文件,用于定义数据库表结构。针对莆田档案培训的需求,我们需要存储学员的姓名、身份证号、所属单位、培训类型、培训日期及考核成绩。请将以下完整代码复制到models.py中:

```python from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() class Trainee(db.Model): __tablename__ = 'trainees' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50), nullable=False) id_card = db.Column(db.String(18), unique=True, nullable=False) unit = db.Column(db.String(100), nullable=False) training_type = db.Column(db.String(50), nullable=False) training_date = db.Column(db.Date, nullable=False) score = db.Column(db.Integer, nullable=False) def to_dict(self): return { 'id': self.id, 'name': self.name, 'id_card': self.id_card, 'unit': self.unit, 'training_type': self.training_type, 'training_date': self.training_date.strftime('%Y-%m-%d'), 'score': self.score } ```

注意:身份证号使用String类型存储,避免科学计数法问题;日期使用Date类型便于后续统计。

四、后端业务逻辑开发

创建app.py文件,这是系统的核心逻辑部分,包含数据库配置、路由定义和CRUD(增删改查)操作。请复制以下完整代码:

```python from flask import Flask, render_template, request, redirect, url_for, flash from datetime import datetime from models import db, Trainee app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///training.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False app.config['SECRET_KEY'] = 'putian_archives_secret_key_2024' db.init_app(app) with app.app_context(): db.create_all() @app.route('/') def index(): search_query = request.args.get('search', '') query = Trainee.query if search_query: query = query.filter(Trainee.name.contains(search_query) | Trainee.id_card.contains(search_query)) trainees = query.order_by(Trainee.training_date.desc()).all() return render_template('index.html', trainees=trainees, search_query=search_query) @app.route('/add', methods=['GET', 'POST']) def add_trainee(): if request.method == 'POST': try: name = request.form['name'] id_card = request.form['id_card'] unit = request.form['unit'] training_type = request.form['training_type'] training_date = datetime.strptime(request.form['training_date'], '%Y-%m-%d') score = int(request.form['score']) new_trainee = Trainee( name=name, id_card=id_card, unit=unit, training_type=training_type, training_date=training_date, score=score ) db.session.add(new_trainee) db.session.commit() flash('学员档案添加成功!', 'success') return redirect(url_for('index')) except Exception as e: db.session.rollback() flash(f'添加失败,请检查输入信息,特别是身份证号是否重复。错误: {e}', 'error') return render_template('add.html') @app.route('/edit/', methods=['GET', 'POST']) def edit_trainee(id): trainee = Trainee.query.get_or_404(id) if request.method == 'POST': try: trainee.name = request.form['name'] trainee.id_card = request.form['id_card'] trainee.unit = request.form['unit'] trainee.training_type = request.form['training_type'] trainee.training_date = datetime.strptime(request.form['training_date'], '%Y-%m-%d') trainee.score = int(request.form['score']) db.session.commit() flash('学员档案更新成功!', 'success') return redirect(url_for('index')) except Exception as e: db.session.rollback() flash(f'更新失败: {e}', 'error') return render_template('edit.html', trainee=trainee) @app.route('/delete/', methods=['POST']) def delete_trainee(id): trainee = Trainee.query.get_or_404(id) try: db.session.delete(trainee) db.session.commit() flash('学员档案已删除。', 'success') except Exception as e: db.session.rollback() flash(f'删除失败: {e}', 'error') return redirect(url_for('index')) if __name__ == '__main__': app.run(debug=True, port=5000) ```

零基础搭建莆田档案培训学员管理系统实操

这段代码实现了自动创建数据库文件training.db,首页支持按姓名或身份证号搜索,以及完整的增删改查逻辑。

五、前端页面实现

为了保持界面简洁且无需复杂的前端构建工具,我们使用Bootstrap 5 CDN进行样式渲染。请在templates文件夹下依次创建以下HTML文件。

1. 基础模板 base.html

这是所有页面的公共骨架,包含导航栏和消息提示样式:

```html 莆田档案培训管理系统
{% with messages = get_flashed_messages(with_categories=true) %} {% if messages %} {% for category, message in messages %}
{{ message }}
{% endfor %} {% endif %} {% endwith %} {% block content %}{% endblock %}
```

2. 学员列表页 index.html

展示所有学员数据,并提供搜索、编辑和删除入口:

```html {% extends "base.html" %} {% block content %}

学员档案列表

+ 新增学员
{% for trainee in trainees %} {% else %} {% endfor %}
ID 姓名 身份证号 所属单位 培训类型 培训日期 成绩 操作
{{ trainee.id }} {{ trainee.name }} {{ trainee.id_card }} {{ trainee.unit }} {{ trainee.training_type }} {{ trainee.training_date.strftime('%Y-%m-%d') }} {{ trainee.score }} 编辑
暂无数据
{% endblock %} ```

3. 添加学员页 add.html

包含一个完整的表单,用于录入新学员信息:

```html {% extends "base.html" %} {% block content %}

新增学员档案

返回
{% endblock %} ```

4. 编辑学员页 edit.html

复用添加页面的表单结构,但预填充现有数据:

```html {% extends "base.html" %} {% block content %}

编辑学员档案

返回
{% endblock %} ```

六、系统启动与功能验证

所有代码文件创建完毕后,即可启动系统。确保终端位于项目根目录下,且虚拟环境处于激活状态,执行以下命令启动服务:

```bash python app.py ```

当终端出现Running on http://127.0.0.1:5000提示时,说明启动成功。打开浏览器,访问http://127.0.0.1:5000

验证步骤:

  1. 添加数据:点击“+ 新增学员”,输入姓名“张三”,身份证号“350300199001011234”,单位“莆田市档案馆”,选择培训类型和日期,输入成绩“85”,点击提交。确认页面跳转回列表页且数据显示正确。
  2. 搜索功能:在搜索框输入“张三”或身份证号部分数字,点击搜索,确认列表能正确过滤出对应记录。
  3. 编辑功能:点击张三记录后的“编辑”按钮,修改成绩为“90”,保存后确认列表数据已更新。
  4. 删除功能:点击“删除”按钮,确认弹窗提示,确认后该记录应从列表中移除。

至此,一套针对莆田档案培训场景的轻量级学员管理系统已完全落地。数据将保存在根目录下的training.db文件中,重启服务器后数据依然存在。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

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

微信扫码关注安答联动

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

安答联动档案管理系统