从零搭建企业级档案系统:培训服务技术实操指南

一、核心目标与工具选型

本文的目标是指导你搭建一个用于内部培训服务的档案管理系统,实现从课程资料、讲师信息到学员学习记录的电子化集中管理。我们将使用开源技术栈,确保零成本部署与高可扩展性。

我们选择以下核心工具:

  • 后端框架: Django (Python)。因其自带强大的Admin管理后台,能快速构建数据模型。
  • 数据库: SQLite (开发/轻量级生产) 或 PostgreSQL (正式生产)。本文以SQLite为例,无需额外安装。
  • 前端: 使用Django模板,简化开发,聚焦业务逻辑。
  • 文件存储: Django默认的本地存储,便于理解。生产环境可替换为云存储。

二、环境准备与项目初始化

确保你的操作系统已安装Python 3.8+。所有操作在命令行终端中完成。

1. 创建虚拟环境与安装依赖

隔离项目环境,避免包冲突。

打开终端,执行以下命令:

 创建项目目录并进入
mkdir training_archive_system && cd training_archive_system
创建Python虚拟环境
python -m venv venv
激活虚拟环境
Windows系统执行:
venv\Scripts\activate
Linux/macOS系统执行:
source venv/bin/activate
安装Django
pip install django==4.2

激活后,命令行提示符前会出现(venv)标识。

2. 创建Django项目与应用

 创建名为"config"的Django项目
django-admin startproject config .
创建名为"archive"的核心应用
python manage.py startapp archive

项目结构应如下所示:

training_archive_system/
├── venv/                  虚拟环境目录
├── manage.py
├── config/                项目配置目录
│   ├── __init__.py
│   ├── settings.py       核心配置文件
│   ├── urls.py
│   └── wsgi.py
└── archive/              档案系统应用目录
├── __init__.py
├── admin.py
├── apps.py
├── models.py        数据模型文件
├── tests.py
└── views.py

三、定义数据模型

archive/models.py中定义档案系统的核心数据结构。

from django.db import models
from django.contrib.auth.models import User
class Trainer(models.Model):
"""讲师档案"""
name = models.CharField(max_length=100, verbose_name='姓名')
employee_id = models.CharField(max_length=50, unique=True, verbose_name='工号')
department = models.CharField(max_length=100, verbose_name='所属部门')
expertise = models.TextField(verbose_name='擅长领域')
resume = models.FileField(upload_to='trainer_resumes/', verbose_name='简历文件', null=True, blank=True)
class Meta:
verbose_name = '讲师档案'
verbose_name_plural = verbose_name
def __str__(self):
return self.name
class TrainingCourse(models.Model):
"""培训课程档案"""
COURSE_TYPE_CHOICES = (
('online', '线上课程'),
('offline', '线下集训'),
('hybrid', '混合式'),
)
title = models.CharField(max_length=200, verbose_name='课程标题')
course_code = models.CharField(max_length=50, unique=True, verbose_name='课程代码')
description = models.TextField(verbose_name='课程描述')
course_type = models.CharField(max_length=10, choices=COURSE_TYPE_CHOICES, verbose_name='课程类型')
duration_hours = models.PositiveIntegerField(verbose_name='课时(小时)')
trainer = models.ForeignKey(Trainer, on_delete=models.SET_NULL, null=True, verbose_name='主讲讲师')
materials = models.FileField(upload_to='course_materials/', verbose_name='课程资料包', blank=True)
class Meta:
verbose_name = '培训课程'
verbose_name_plural = verbose_name
def __str__(self):
return f"{self.course_code} - {self.title}"
class TrainingRecord(models.Model):
"""培训记录档案"""
trainee = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='学员')
course = models.ForeignKey(TrainingCourse, on_delete=models.CASCADE, verbose_name='参与课程')
enrolled_at = models.DateTimeField(auto_now_add=True, verbose_name='报名时间')
completed_at = models.DateTimeField(null=True, blank=True, verbose_name='完成时间')
score = models.FloatField(null=True, blank=True, verbose_name='考核成绩')
feedback = models.TextField(blank=True, verbose_name='学员反馈')
certificate = models.FileField(upload_to='certificates/', verbose_name='结业证书', null=True, blank=True)
class Meta:
verbose_name = '培训记录'
verbose_name_plural = verbose_name
unique_together = ['trainee', 'course']   防止重复报名
def __str__(self):
return f"{self.trainee.username} - {self.course.title}"

四、配置项目并激活模型

1. 注册应用与媒体文件设置

编辑config/settings.py文件。

找到INSTALLED_APPS列表,添加'archive'应用:

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'archive',   新增此行
]

在文件末尾添加媒体文件配置,用于存储上传的文件:

 媒体文件设置
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'

2. 生成数据库并创建超级用户

在终端执行以下命令:

从零搭建企业级档案系统:培训服务技术实操指南

 生成数据库迁移文件
python manage.py makemigrations archive
执行迁移,创建数据库表
python manage.py migrate
创建管理员账户,用于登录后台
python manage.py createsuperuser
按提示输入用户名、邮箱和密码

五、配置管理后台与文件访问

1. 注册模型到Admin后台

编辑archive/admin.py文件,使模型能在后台管理。

from django.contrib import admin
from .models import Trainer, TrainingCourse, TrainingRecord
@admin.register(Trainer)
class TrainerAdmin(admin.ModelAdmin):
list_display = ('name', 'employee_id', 'department')
search_fields = ('name', 'employee_id')
@admin.register(TrainingCourse)
class TrainingCourseAdmin(admin.ModelAdmin):
list_display = ('course_code', 'title', 'course_type', 'trainer')
list_filter = ('course_type',)
@admin.register(TrainingRecord)
class TrainingRecordAdmin(admin.ModelAdmin):
list_display = ('trainee', 'course', 'enrolled_at', 'score')
list_filter = ('course',)

2. 配置URL路由与开发服务器文件服务

编辑项目主路由文件config/urls.py

from django.contrib import admin
from django.urls import path
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
]
仅在开发环境提供媒体文件访问
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

六、启动系统与基础操作

1. 启动开发服务器

python manage.py runserver

终端将显示Starting development server at http://127.0.0.1:8000/

2. 登录后台并录入数据

打开浏览器,访问 http://127.0.0.1:8000/admin,使用创建的超级用户账号登录。

你将看到“ARCHIVE”模块下列出的三个模型:

  1. 添加讲师档案:点击“讲师档案”后的“增加”,填写讲师信息,并可上传PDF格式的简历文件。
  2. 创建培训课程:点击“培训课程”后的“增加”,关联已创建的讲师,上传课程资料(如PPT、PDF)。
  3. 登记培训记录:点击“培训记录”后的“增加”,选择学员(即Django用户,可在“认证和授权”下的“用户”中添加)和对应课程,记录成绩并上传结业证书。

所有上传的文件将自动保存在项目根目录的media/文件夹下,并按模型字段的upload_to参数分类。

七、核心功能扩展实操

1. 实现按部门统计培训学时的视图

archive/views.py中创建业务视图:

from django.db.models import Sum
from django.contrib.auth.models import User
from django.shortcuts import render
from .models import TrainingRecord
def department_training_hours(request):
按学员所属部门(这里简化使用用户组的第一个组名作为部门)聚合培训总时长
stats = []
for user in User.objects.filter(groups__isnull=False).distinct():
dept_name = user.groups.first().name if user.groups.exists() else '未分组'
total_hours = TrainingRecord.objects.filter(
trainee=user,
completed_at__isnull=False
).aggregate(
total=Sum('course__duration_hours')
)['total'] or 0
stats.append({
'department': dept_name,
'user': user.username,
'total_hours': total_hours
})
return render(request, 'archive/department_stats.html', {'stats': stats})

创建模板文件archive/templates/archive/department_stats.html




部门培训学时统计


部门培训学时统计

{% for item in stats %} {% endfor %}
部门 学员 总完成学时(小时)
{{ item.department }} {{ item.user }} {{ item.total_hours }}

archive目录下创建urls.py文件,并配置路由:

from django.urls import path
from . import views
urlpatterns = [
path('stats/department/', views.department_training_hours, name='dept_stats'),
]

将应用路由包含到项目config/urls.pyurlpatterns中:

from django.contrib import admin
from django.urls import path, include   新增include导入
urlpatterns = [
path('admin/', admin.site.urls),
path('archive/', include('archive.urls')),   新增此行
]

访问 http://127.0.0.1:8000/archive/stats/department/ 即可查看统计页面。

2. 关键生产环境部署步骤

  • 切换数据库:在settings.py中,将DATABASES配置为PostgreSQL,并安装psycopg2-binary包。
  • 收集静态文件:执行python manage.py collectstatic
  • 关闭DEBUG模式:设置DEBUG = False,并配置ALLOWED_HOSTS
  • 使用Web服务器:通过Gunicorn或uWSGI部署,并用Nginx或Apache处理静态文件和媒体文件,替换开发服务器的static()方式。
  • 文件存储:使用AWS S3、阿里云OSS等云服务存储媒体文件,通过Django Storages库配置。

至此,一个具备讲师、课程、培训记录管理,支持文件上传,并可扩展统计功能的培训档案系统已搭建完成。你可以根据具体业务需求,继续在模型中添加字段,或开发更复杂的查询与分析功能。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

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

微信扫码关注安答联动

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

安答联动档案管理系统