Python+Django企业级实战:一站式员工考勤管理系统开发全解
2026/6/7 12:37:03 网站建设 项目流程

一、项目背景与痛点

中小型企业、办公团队、培训机构日常人事考勤管理工作中,传统打卡机、纸质签到、Excel统计模式存在大量短板,随着人员增多、办公场景多元化(内勤办公、外出外勤、居家办公),考勤管理的矛盾愈发突出,核心痛点如下:

  • 传统打卡方式局限性大:实体打卡机仅支持固定地点签到,员工外勤、出差、居家办公无法正常打卡,考勤数据缺失严重;
  • 请假流程繁琐低效:纸质假条逐层签字审批,流程周期长、单据易丢失,无法实时查看审批进度;
  • 人工统计考勤耗时易错:行政人员每日核对打卡记录、统计迟到、早退、旷工、加班数据,手工计算考勤效率低且容易出错;
  • 考勤异常难以追溯:迟到、缺卡、旷工等异常记录无备注、无佐证,事后核查缺乏有效依据;
  • 加班管理不规范:临时加班、值班无统一登记渠道,加班时长、加班事由无存档,薪资核算缺少数据支撑;
  • 部门数据无法隔离:多部门共用考勤数据,普通员工可查看其他部门考勤信息,存在数据隐私问题。

针对传统考勤模式的各类问题,本次基于Python+Django4.2+MySQL+地理位置校验搭建轻量化企业员工考勤管理系统,实现员工档案管理、内勤打卡、外勤定位签到、多级请假审批、加班登记、异常考勤标记、月度考勤报表、部门数据隔离全套闭环能力。本项目开辟企业人事考勤全新赛道,和往期所有项目场景、功能、代码完全不重合。

二、核心目标与定位

本项目核心目标:搭建数字化企业考勤管理平台,实现员工信息建档→内勤/外勤打卡→加班登记→线上请假逐级审批→考勤数据自动汇总→异常考勤标记核查→部门数据隔离→月度考勤报表导出完整闭环,彻底替代纸质签到、实体打卡机与Excel手工统计,实现考勤全流程线上化、标准化、自动化

项目精准定位:轻量化企业人事考勤系统,采用Django原生MVT架构,无需前后端分离,部署简单、服务器资源占用低;划分超级管理员、部门主管、普通员工三类角色,权限逐级隔离,不同部门数据相互独立;适配中小民营企业、工作室、线下培训机构、行政班组等场景,主打打卡多元化、审批流程化、统计自动化、数据安全化。

核心设计理念:打卡场景全覆盖、审批流程规范化、考勤计算自动化、异常记录可追溯、部门数据私有化,解决传统考勤低效、混乱、难核查的核心问题。


三、整体技术方案

项目基于Django原生MVT分层架构开发,MySQL存储员工、打卡、请假、加班、审批全量业务数据,后端封装时间校验、地理位置校验算法,结合Django工作流实现多级审批,依靠ORM聚合查询完成考勤统计,前端实现列表与报表展示。整体分层架构流程图如下:

┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 员工操作层 │────▶│ 身份权限层 │────▶│ 打卡校验层 │────▶│ 申请流程层 │ │ 上下班打卡/外勤签到/请假/加班申请 │ 角色与部门权限拦截、数据隔离 │ 时间+定位双重合法性校验 │ 请假、加班线上提交流程 │ │ │ │ │ ▼ ▼ ▼ ▼ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 多级审批层 │────▶│ 异常标记层 │────▶│ 考勤统计层 │ │ 部门主管逐级审批流转 │ 自动标记迟到/早退/缺卡 │ 日/月考勤汇总、报表生成 │ │ │ │ ▼ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ 底层技术底座 │ │ - 后端框架:Python3.11 + Django4.2 原生MVT架构 │ │ - 数据存储:MySQL 存储员工、打卡、请假、加班、审批全业务数据 │ │ 时间校验:datetime 模块判断上下班时间、区分迟到/早退 │ │ 定位校验:经纬度比对,实现外勤签到地理位置限制 │ │ 流程引擎:Django表单+状态流转,实现多级审批流程 │ │ 权限体系:自定义中间件,实现角色、部门双重数据隔离 │ │ 数据统计:ORM聚合查询,自动生成考勤报表、异常数据汇总 │ │ 文件导出:支持考勤数据Excel报表导出 │ └─────────────────────────────────────────────────────────────────────────

完整技术栈清单

  • Web后端:Python 3.11、Django 4.2 原生MVT轻量化架构
  • 数据库:MySQL,结构化存储人事、考勤、审批全量数据
  • 时间处理:datetime 模块完成上下班时段、迟到、早退判定
  • 位置校验:经纬度计算,限制外勤打卡范围
  • 流程管理:自定义状态枚举,实现请假、加班多级审批流转
  • 权限控制:自定义中间件,角色+部门双重权限隔离
  • 数据统计:Django ORM聚合函数,批量统计考勤数据
  • 文件导出:Excel文件生成,支持考勤报表离线导出

四、核心能力模块详解

1. 员工与部门档案管理模块

搭建企业组织架构与员工电子档案,为考勤业务提供基础数据支撑:

  • 多级部门管理:支持总公司、分部门、小组多层级架构,管理员可增删改部门;
  • 员工信息建档:录入工号、姓名、岗位、入职时间、所属部门、联系方式等完整信息;
  • 岗位角色分配:区分普通员工、部门主管、系统管理员,绑定对应操作权限;
  • 数据隔离:员工仅查看本人考勤,部门主管仅管理本部门人员数据。

2. 多元化打卡模块(核心亮点)

适配内勤、外勤、出差等多办公场景,告别单一实体打卡机:

  • 内勤上下班打卡:设置规定上班/下班时段,系统自动判定正常、迟到、早退、缺卡;
  • 外勤定位签到:提交打卡经纬度,后台比对预设办公区域,防止异地代打卡;
  • 补卡申请:漏打卡员工可提交补卡申请,主管审核通过后补录考勤记录;
  • 打卡记录实时生成:每次打卡自动留存时间、地点、打卡类型,永久可查。

3. 多级请假审批模块

标准化线上请假流程,替代纸质假条,全程进度可追踪:

  • 多假期类型:支持事假、病假、年假、调休等多种假期分类;
  • 多级审批流程:员工发起申请 → 直属主管审批 → 行政复核,流程逐级流转;
  • 审批状态展示:实时显示待审核、已通过、已驳回状态,驳回附带原因;
  • 假期时长计算:自动根据起止时间统计请假天数,计入月度考勤。

4. 加班登记与管理模块

规范加班流程,统一留存加班记录,为薪资核算提供依据:

  • 加班信息登记:填写加班起止时间、加班事由、加班类型(工作日/周末/节假日);
  • 加班审批:加班申请需主管审核,审核通过后方生效;
  • 加班时长统计:系统自动核算有效加班时长,按月汇总;
  • 加班记录归档:所有加班数据永久存档,支持历史查询。

5. 考勤异常管理模块

自动识别考勤问题,集中汇总、人工核查,实现异常可追溯:

  • 自动异常标记:每日自动筛选迟到、早退、全天缺卡、超时未打卡人员;
  • 异常备注补充:针对异常记录,员工或主管可添加文字说明;
  • 异常批量处理:管理员可批量核查、标记异常状态;
  • 异常数据统计:按月统计部门/个人异常考勤次数。

6. 考勤报表与导出模块

自动化生成考勤报表,支持离线归档与薪资核算:

  • 个人考勤查询:员工查看每日打卡、请假、加班、异常明细;
  • 部门汇总报表:主管查看本部门全体人员月度考勤数据;
  • 多维度筛选:按日期、部门、人员、考勤类型筛选数据;
  • Excel导出:一键导出考勤报表,用于线下归档、薪资核算。

五、创新价值与亮点

  1. 全场景打卡适配:同时支持内勤固定打卡、外勤定位签到,解决传统打卡机无法适配外出办公的痛点;
  2. 线上多级审批流程:请假、加班全流程线上化,单据永不丢失,审批进度实时可见;
  3. 考勤全自动化统计:系统自动判定迟到、早退、缺卡,告别人工核对,大幅降低行政工作量;
  4. 双重数据隔离机制:角色+部门双重权限管控,保障各部门考勤数据隐私安全;
  5. 完整追溯体系:打卡、请假、加班、异常记录全程留痕,出现争议可快速核查溯源。

六、应用前景与落地场景

  • 中小型企业内部考勤:适配传统办公企业、互联网工作室,替代实体打卡机与纸质假条;
  • 线下培训机构/门店:培训机构、连锁门店员工考勤管理,支持外勤巡店打卡;
  • 政企班组行政考勤:机关单位、基层班组轻量化人事考勤管理;
  • 毕业设计/简历实战项目:人事管理类典型业务系统,区别于商城、网盘、考试等常规项目,差异化突出。

七、完整代码结构示例

1. 项目整体目录结构

django-company-attendance/├── manage.py ├── attendance_project/# 项目全局配置│ ├── settings.py# 数据库、权限、打卡时段、经纬度配置│ ├── urls.py# 全业务路由分发│ └── middleware.py# 角色、部门权限中间件├── apps/# 模块化业务拆分│ ├── dept_staff/# 部门、员工档案、角色管理模块│ ├── clock_in/# 内勤打卡、外勤定位签到模块│ ├── leave_apply/# 请假申请、多级审批模块│ ├── overtime/# 加班登记、加班审批模块│ ├── abnormal_check/# 考勤异常标记、核查模块│ └── report_export/# 考勤报表、Excel导出模块├── core/# 公共工具类│ ├── time_judge.py# 上下班时间、迟到早退判定工具│ ├── location_check.py# 外勤经纬度校验工具│ ├── flow_calc.py# 审批流程、时长计算工具│ └── excel_tool.py# 报表生成、Excel导出工具├── static/# 页面样式、前端脚本├── templates/# 前台、管理后台模板├── media/# 附件、截图存储目录├── requirements.txt# 项目依赖包└── readme.md# 部署、使用文档</pre>### 2. 核心可运行代码片段#### 示例1:员工、打卡、请假核心数据模型```pythonfromdjango.dbimportmodelsfromdjango.contrib.auth.models# 打卡类型枚举CLOCK_TYPE=(("inside","内勤打卡"),("outside","外勤打卡"),)# 请假状态枚举LEAVE_STATUS=(("wait","待审批"),("pass","审批通过"),("reject","审批驳回"),)# 假期类型枚举LEAVE_TYPE=(("personal","事假"),("sick","病假"),("annual","年假"),("rest","调休"),)classDepartment(models.Model):"""部门模型"""dept_name=models.CharField(max_length=50,verbose_name="部门名称")parent_dept=models.ForeignKey("self",null=True,blank=True,on_delete=models.SET_NULL,verbose_name="上级部门")create_time=models.DateTimeField(auto_now_add=True)def__str__(self):returnself.dept_nameclassStaff(models.Model):"""员工模型"""staff_no=models.CharField(max=20,unique=True,verbose_name="工号")name=models.CharField(max=30,verbose_name="姓名")phone=models.CharField(max=11,verbose_name="手机号")department=models.ForeignKey(Department,on_delete=models.CASCADE,verbose_name="所属部门")is_manager=models.BooleanField(default=False,verbose_name="是否部门主管")entry_time=models.DateField(verbose_name="入职时间")create_time=models.DateTimeField(auto_now_add=True)def__str__(self):returnself.nameclassClockRecord(models.Model):"""打卡记录模型"""staff=models.ForeignKey(Staff,on_delete=models.CASCADE,verbose_name="打卡员工")clock_type=models.CharField(max=10,choices=CLOCK_TYPE,verbose_name="打卡类型")clock_time=models.DateTime(verbose_name="打卡时间")location=models.CharField(max=100,blank=True,verbose_name="打卡地点/经纬度")is_late=models.BooleanField(default=False,verbose_name="是否迟到")is_early=models.BooleanField(default=False,verbose_name="是否早退")create_time=models.DateTime(auto_now_add=True)classLeaveApply(models.Model):"""请假申请模型"""staff=models.ForeignKey(Staff,on_delete=models.CASCADE,verbose_name="申请人")leave_type=models.CharField(max=10,choices=LEAVE_TYPE,verbose_name="假期类型")start_time=models.DateTime(verbose_name="请假开始时间")end_time=models.DateTime(verbose_name="请假结束时间")leave_reason=models.TextField(verbose_name="请假事由")audit_status=models.CharField(max=10,choices=LEAVE_STATUS,default="wait",verbose_name="审批状态")audit_note=models.CharField(max=200,blank=True,verbose_name="审批备注")create_time=models.DateTime(auto_now_add=True)
示例2:上下班时间判定工具类(core/time_judge.py)
fromdatetimeimportdatetimefromdjango.confimportsettingsclassTimeJudge:"""考勤时间判定工具:判断迟到、早退"""# 从配置读取上下班标准时间WORK_START=settings.WORK_START_TIME WORK_END=settings.WORK_END@classmethoddefjudge_late(cls,clock_dt):"""判断是否迟到"""work_start=datetime.strptime(cls.WORK_START,"%H:%M:%S").time()clock_time=clock_dt.time()returnclock_time>work_start@classmethoddefjudge_early_leave(cls,clock_dt):"""判断是否早退"""work_end=datetime.strptime(cls.WORK_END,"%H:%M:%S").time()clock_time=clock_dt.time()returnclock_time<work_end
示例3:内勤打卡核心视图逻辑(apps/clock_in/views.py)
fromdjango.viewsimportViewfromdjango.contrib.auth.decoratorsimportlogin_requiredfromdjango.utils.decoratorsimportmethod_decoratorfromdjango.httpimportJsonResponsefromapps.dept_staff.modelsimportStafffromapps.clock_in.modelsimportClockRecordfromcore.time_judgeimportTimeJudge@method_decorator(login_required,name="dispatch")classInsideClockView(View):"""内勤打卡视图"""defpost(self,request):staff_id=request.POST.get("staff_id")try:staff=Staff.objects.get(id=staff)exceptStaff.DoesNotExist:returnJsonResponse({"code":400,"msg":"员工信息不存在"})now_dt=datetime.now()# 判定迟到、早退is_late=TimeJudge.judge_late(now_dt)is_early=False# 生成打卡记录ClockRecord.objects.create(staff=staff,clock_type="inside",clock_time=now_dt,location="公司内勤",is_late=is_late,is_early=is_early)msg="打卡成功"ifis_late:msg+=",本次打卡判定为迟到"returnJsonResponse({"code":200,"msg":msg})

八、总结与展望

本篇博客聚焦企业人事考勤管理全新业务赛道,基于Python+Django搭建全流程线上考勤系统,和往期日志、天气、在线考试、图书、网盘、聊天室、进销存、房屋租赁、OAuth登录、访客系统等所有项目完全独立。项目融合时间算法、位置校验、多级审批流、角色权限、Excel报表导出等核心技术,覆盖打卡、请假、加班、异常核查、数据导出全考勤场景,业务贴合企业真实行政需求,代码规范、部署简单,可直接落地使用。

该项目既是学习Django状态流转、流程管理、权限设计的优质案例,也是求职、毕业设计中辨识度极高的人事类实战项目。

后续迭代规划

  1. 新增人脸识别打卡功能,进一步杜绝代打卡行为;
  2. 接入站内消息/短信提醒,请假审批结果、考勤异常主动推送;
  3. 新增月度考勤薪资联动,结合考勤数据自动核算绩效工资;
  4. 增加移动端适配,支持手机端随时随地打卡、发起申请。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询