django下的考勤机管理系统定制实例

程序安装及概要

最近用到了一款考勤机xFace100,其后台管理程序为zktime,是一个考勤刷脸的django为基础的BS架构管理程序。
供应商让从官网下载了zktime的11.1版安装包,对于我的使用场景比较契合,用于管理分布于多个物理地址的指纹打脸机,试用版有效期1个月,支持5台设备。对人员和考勤的管理比较规范完整,具备班次管理、排班、请假、生成考勤表的功能,具体可参看管方说明。

  • 此程序后端可使mysql、mssql、oracle等数据库。安装时程序默认发布在mysql。我使用的是oracle11。
  • web前端主要是使用django,版本1.11.29。 支持缓存和静态apache服务。
  • timer.py使用了apscheduler启动一些计划任务,这些任务在web前端有个管理入口,比如计算上班时长,数据汇总等。

全部程序代码和支持库存在于zktime安装目录,包括python,django,mysite,dll。由一些批处理*bat进行环境初始化,服务部署分配,状态检测。其核心用户验证和版本检测使用了pyd文件,具备防止反编译的功能。

经验技巧分析探讨

本文以下部分将对Zktime11.1B/S版的一些经验技巧进行分析探讨,希望为此类型场景有需要的人提供借鉴支持。

一、对web端的定制,环境的准备

此软件有一个窗口管理各种服务的状态启停测试,对开发者来说可先停止所有服务包括cache、server、apache、proxy四个服务。
然后打开cmd窗口,进入软件安装目录运行

cd c:/zktime
init.bat
pyton mysite/manager.py  shell

进入开发环境里的django shell,可以对model进行测试,对各业务模块进行引用,或自己定义一部分功能函数进行定制。

python mysite/manager.py  runserver

去启动试用服务。在这之前要确保数据库已经初始化,并且正常启动,一般来讲,只要官方的启动状态是好的,能进入web管理,那么
runserver命令打开的服务将是基本一致正常使用。
以上为定制准备好了调试环境,下面还要准备代码环境,一个大概的情况是
mysite是web程序主目录,里面分很多个功能模块,有用户、考勤机、门禁、会议等。每个里面有各自的url、model、view以实现这种经典的设计。
mysite目录下有一个总的url进行引入,接入管理。以后会经常用到。
而所有的这些都是pyc文件,对用户来说是加密,我们通过

uncomplye和decompyle

的使用发现,某些文件可以读懂其中的大概,比如url,比如model,然而这些文件都不能替换最初文件使用。只是帮助分析出大体功能对应的位置,或者某个model对应的table,还有某个计时器对应的函数内容。有了这些对定制程序会很有帮助。在此基础上,我将进行下一步定制工作。

二、对数据库和model的定制

在具体使用过程,我们经常需要建立自己的model,对应于一个新的表格,这就需要重写model文件,进行migrate,数据迁移。这个功能对我来说是试验性的,过程是:
在现有app里新建models.py,将原了models.pyc,解码参考其现有数据,原有文件改写名称models01.pyc,在文件首部
from models01 import *
这样在不影响即有功能的情况,具备了自定义model的能力。在完成以后,进行
migrate,然后使用
pyton mysite/manager.py shell
进行试用即可

三、对url的重写views定制返回json数据格式

将某个urls改名,和model相仿,就可以完成新的urls的定制,views也可使用相同的方法加入新的响应代码,以完成想要的新功能。我对django的开发并是熟悉,原则上可以新建自己
想要的项目添加进来。

四、修改菜单,加入url新项

导航菜单在mysite,urls中有一段代码对应一块html数据,通过对这一块数据的更改替换可完成菜单的定制,加入自己需要的菜单。菜单细节可能存在于某个model中,进行了保存。

五、引入vue

完成了以上的测试,我引入了一个Vue页面,是对所有当班人员进行了分类显示,比如,迟到的,请假的。而这些人员又能分部门和全员汇总,前端部门树菜单使用了原有接口,用js的函
数进行更改,让点击操作,对应到对vue的函数调用。将vue函数公开到总体框架,使用windows.vue.function().进行调用,来更改窗口的外观和数据展示,效果还行。下面是的部署细节

  • 将这个json数据源的获取加入某个views中,我加入了meeting这个现存的不用的模块中成为其中的一部分隐含功能。
  • model使用即有的人员分析。
  • 前端页面放在mysitet/template下面由apache服务获取,或者django调度使用。
  • 将静态页面地址加入urls测试,成功后加入前端菜单框架,提供最终用户访问。数据源函数可加入验证逻辑,登陆后才能使用。

*** 经验点滴摘要对用户验证逻辑的定制

完成以上操作过程中遇到一个绊脚石,就是不定时,无法预期的,在web登录窗口提示程序文件被修改,请重新安装之类的错误。通过对可读的那一部分代码分析,这应该是一种pyd认
证函数内置的,对当前目录文件属性的一个分析造成。当有新文件存在,禁止用户登录使用此系统。这就禁止了普通用户和病毒对程序的破坏。对于定制软件的开发人员,由于有以上
的分析,这个过程被绕过了,关键在于验证用户的函数,它包含在某个url中,对用户密码时行分析,将这个函数覆盖定义,加入查询,认证,但不去使用原有函数的分析目录过程,只
返回用户密码正确或错误的结果。修改后启动。原来的目录检测消失,不再提示。就此搬开了这块绊脚石才有了上面这此篇幅。

总结及免责声明

最后,此文提供一些定制django程序的方式和方法,为了应对不停变化的业务需求,这好像是不可避免的。而推倒重来好像又工程巨大,耗时又费力。这些定制方法提供了一种暂时方案。
本文以学习交流为目的,并未用于任何商业用途,如有侵权,马上删除。

猜你喜欢

转载自blog.csdn.net/wjcroom/article/details/125844671
今日推荐