基于Django快速开发人事档案管理系统全流程
环境准备与依赖安装
在开始构建人事档案管理系统之前,必须先配置好Python开发环境。本系统基于Python 3.9及以上版本和Django 4.2 LTS框架开发。请确保你的操作系统已安装Python,并打开终端(Windows下为CMD或PowerShell,Mac/Linux下为Terminal)执行以下操作。
为了隔离项目环境,避免依赖冲突,我们需要创建一个虚拟环境。在项目存放目录下执行:
```bash 创建名为hr_system_env的虚拟环境 python -m venv hr_system_env 激活虚拟环境 Windows系统执行: hr_system_env\Scripts\activate Mac/Linux系统执行: source hr_system_env/bin/activate ```激活虚拟环境后,命令行提示符前会出现`(hr_system_env)`标识。接下来安装Django框架以及处理Excel文件所需的库:
```bash 安装Django 4.2版本 pip install django==4.2.11 安装openpyxl用于后续可能的Excel导入导出功能 pip install openpyxl ```项目创建与应用初始化
环境配置完毕后,开始创建Django项目骨架。我们将项目命名为`hr_project`,并创建一个专门处理人事核心业务的应用`core`。
```bash 创建Django主项目 django-admin startproject hr_project 进入项目根目录 cd hr_project 创建核心业务应用 python manage.py startapp core ```项目创建完成后,需要将新建的`core`应用注册到系统的配置文件中。请使用文本编辑器打开`hr_project/settings.py`文件,找到`INSTALLED_APPS`列表,将`'core'`添加进去:
```python INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'core', 注册核心应用 ] ```数据库模型设计与实现
人事档案管理的核心在于数据结构。我们需要设计一张员工档案表,包含基础信息、职位信息以及档案附件存储。打开`core/models.py`文件,删除原有内容,写入以下完整的模型代码:
```python from django.db import models import os def get_upload_path(instance, filename): """动态生成档案文件上传路径,按部门和姓名归档""" return os.path.join('archives', str(instance.department), filename) class Employee(models.Model): GENDER_CHOICES = ( ('M', '男'), ('F', '女'), ) 基础信息 name = models.CharField(max_length=50, verbose_name='姓名') gender = models.CharField(max_length=1, choices=GENDER_CHOICES, verbose_name='性别') birth_date = models.DateField(verbose_name='出生日期') id_card = models.CharField(max_length=18, unique=True, verbose_name='身份证号') phone = models.CharField(max_length=11, verbose_name='联系电话') email = models.EmailField(verbose_name='电子邮箱', blank=True, null=True) 职位信息 employee_id = models.CharField(max_length=20, unique=True, verbose_name='工号') department = models.CharField(max_length=50, verbose_name='所属部门') position = models.CharField(max_length=50, verbose_name='职位') hire_date = models.DateField(verbose_name='入职日期') is_active = models.BooleanField(default=True, verbose_name='是否在职') 档案附件 resume_file = models.FileField(upload_to=get_upload_path, verbose_name='档案附件', blank=True, null=True) remarks = models.TextField(verbose_name='备注', blank=True, null=True) created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间') class Meta: verbose_name = '员工档案' verbose_name_plural = '员工档案' ordering = ['-hire_date'] def __str__(self): return f"{self.name} ({self.employee_id})" ```系统配置与媒体文件处理
为了支持档案文件(如PDF、Word简历)的上传和预览,必须配置静态文件和媒体文件的存储路径。继续编辑`hr_project/settings.py`文件,在文件末尾添加以下配置:
```python import os 设置项目根目录 BASE_DIR = Path(__file__).resolve().parent.parent 媒体文件配置(用于用户上传的档案) MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 静态文件配置 STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') ```配置完成后,需要修改路由规则以便在开发模式下访问上传的文件。打开`hr_project/urls.py`,修改为以下内容:
```python from django.contrib import admin from django.urls import path, static 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) ```后台管理界面定制
Django自带强大的后台管理系统,我们只需稍作配置即可实现增删改查。打开`core/admin.py`,编写以下代码以优化后台展示效果,增加搜索和筛选功能:
```python from django.contrib import admin from .models import Employee @admin.register(Employee) class EmployeeAdmin(admin.ModelAdmin): 列表页展示字段 list_display = ('employee_id', 'name', 'department', 'position', 'gender', 'phone', 'is_active', 'hire_date') 每页显示数量 list_per_page = 20 启用顶部过滤器 list_filter = ('department', 'position', 'gender', 'is_active', 'hire_date') 启用搜索框,支持按姓名、工号、手机号搜索 search_fields = ('name', 'employee_id', 'phone', 'id_card') 详情页字段分组排版 fieldsets = ( ('基础信息', { 'fields': ('name', 'gender', 'birth_date', 'id_card', 'phone', 'email') }), ('职位信息', { 'fields': ('employee_id', 'department', 'position', 'hire_date', 'is_active') }), ('档案与备注', { 'fields': ('resume_file', 'remarks') }), ) 保存时自动记录操作人(可选扩展) def save_model(self, request, obj, form, change): obj.user = request.user super().save_model(request, obj, form, change) ```数据库迁移与系统初始化
代码编写完成后,需要将模型定义转换为数据库表结构。Django默认使用SQLite数据库,无需安装额外数据库服务即可运行。在项目根目录下依次执行以下命令:
```bash 生成迁移文件(检测模型变化) python manage.py makemigrations 执行迁移(创建表结构) python manage.py migrate ```执行成功后,项目目录下会生成`db.sqlite3`文件。接下来需要创建一个超级管理员账号用于登录后台:
```bash python manage.py createsuperuser ```
执行命令后,按照提示输入用户名、邮箱(可留空)和密码。请牢记密码,例如:用户名`admin`,密码`123456`。
系统运行与功能验证
所有配置完成后,启动开发服务器进行测试。在终端执行:
```bash python manage.py runserver ```看到输出“Starting development server at http://127.0.0.1:8000/”即表示启动成功。打开浏览器访问 http://127.0.0.1:8000/admin。
1. 使用刚才创建的超级管理员账号登录。
2. 登录后,你会看到“Core”应用组下的“员工档案”模型。
3. 点击“员工档案”右侧的“增加”按钮,进入新增页面。
4. 填写员工信息,例如:姓名“张三”,工号“10001”,部门“技术部”。在“档案附件”处选择本地的一个PDF或Word文件。
5. 点击“保存”。
保存成功后,系统会自动跳转至列表页。你可以尝试:
- 搜索测试:在右上角搜索框输入“张三”或“10001”,列表应实时过滤。
- 筛选测试:点击右侧的“部门”过滤器,选择“技术部”,检查列表是否仅显示该部门员工。
- 下载测试:点击某条记录进入详情页,点击“档案附件”下方的文件名链接,验证文件是否能正常下载或预览。
生产环境部署建议
以上步骤完成了开发环境的搭建。若需部署到生产环境供全公司使用,请务必修改`hr_project/settings.py`中的安全配置:
```python 关闭调试模式 DEBUG = False 设置允许访问的域名或IP ALLOWED_HOSTS = [''] 配置静态文件收集服务(部署时需执行python manage.py collectstatic) ```至此,一个具备基础增删改查、文件上传、高级搜索筛选功能的人事档案管理系统已完全落地。整个过程无需编写前端代码,利用Django Admin即可快速交付使用。