皮皮网
皮皮网

【源码加行号】【在线投稿系统 源码】【linux c库源码】考勤拍照源码_考勤拍照源码是什么

来源:神奇通道公式源码 发表时间:2024-12-24 09:33:03

1.对生物识别考勤机的考勤考勤一次简单渗透
2.考勤作弊APP创始人二审改判四年,法院为何会改判?
3.开源轻松实现车牌检测与识别:yolov8+paddleocrpython源码+数据集
4.急求pb考勤管理系统(pb+access)论文
5.考勤作弊APP创始人二审改判4年,拍照拍照这样的源码源码判决是否太轻了?
6.考勤作弊APP创始人二审改判4年,你赞成这一判决吗?

考勤拍照源码_考勤拍照源码是考勤考勤什么

对生物识别考勤机的一次简单渗透

       在一次常规的红队行动中,我获得了客户授权,拍照拍照对一个基于生物信息的源码源码源码加行号考勤设备进行渗透。设备用于日常考勤与特殊房间人员控制。考勤考勤尽管此前未接触该品牌机器,拍照拍照但通过初步检测,源码源码我成功掌握了其控制权。考勤考勤

       设备运行于同一网络,拍照拍照已知其IP地址。源码源码使用nmap扫描后发现,考勤考勤设备开放了telnet和web服务。拍照拍照攻击策略主要围绕这两点展开,源码源码但telnet服务未暴露详细信息。转而关注Web服务,发现其为ZK Web Server 3.0。

       深入了解后,发现Web服务存在大量漏洞,如访问控制缺失、会话固定与易受暴力破解。关键漏洞在于默认凭证(administrator:),借此我以管理员身份登录设备。

       进入备份设备数据页面,发现数据可直接访问,无需身份验证。通过下载.dat文件,获取包含敏感信息的ZKConfig.cfg文件。以root身份登录telnet服务,检索系统文件,发现固件已被解压。在线投稿系统 源码

       将文件系统挂载至本地机器,分析所有文件,发现webserver源代码,可用于深入研究。敏感数据包括所有用户照片与SQLite数据库记录的身份凭证、指纹等生物信息。利用这些信息,我可以修改数据库,赋予任意用户特殊房间访问权限。

       进一步使用Firmwalker提取固件中敏感信息,了解设备数据备份至云服务器的机制。尽管未深入云主机渗透测试,但设备安全问题明显,配置缺陷使任何人都能通过简单漏洞获取敏感数据并完全控制。

       结论是,物联网设备如考勤机常存在配置问题,易被利用。安全防护任重道远。本文由白帽汇整理翻译,不代表白帽汇立场。

考勤作弊APP创始人二审改判四年,法院为何会改判?

       我认为法院之所以在二审判决中改判原因是一审法院是根据该名男子破坏计算机信息系统罪进行量刑,而二审法院则认为,这款软件不属于刑法中的破坏性程序,所以该名男子虽然依然是涉嫌这项罪名,但是罪行减轻了,随之在二审判决中就判处有期徒刑4年决定。

       我认为法院在这次量刑中改判的十分合理,毕竟这款软件并没有在网络上造成恶性传播,也没有攻击网络程序,没有造成人员信息丢失,linux c库源码泄露甚至重大互联网恶性事件出现,只是让用户个人使用时会通过修改定位功能来满足个人目的,这种目的满足对社会并没有危害性,也没有给社会带来隐患以及损失,所以根据这种情况,二审法院所判的4年有期徒刑属于减刑判决,认为软件不属于破坏性程序,所以改判。

       一、案件始末是什么?

       在这起案件中,该男子通过购买其他公司软件源代码,并且修改数据后制作成了一款名叫大牛助手的APP,并在网络上售卖传播,软件的主要盈利方式是通过用户下载后包月或者包年会员方式来进行收费,软件其实并没有什么问题,只不过用户在下载软件后可以隐藏个人定位,并且可以自行修改个人位置,在法律上认为该名男子软件属于破坏计算机信息系统罪,所以一审判决该名男子判处有期徒刑5年6个月,男子表示不服进行二次申诉,二次法院认为该名男子软件不属于法律中的破坏性程序,于是将判决减轻到有期徒刑4年。

       二、希望该名男子汲取教训。

       我认为该名男子的行为已经涉嫌法律,在软件制作过程中,自己已经可以预见性的知道后果,自己在购买软件源代码后再对源代码进行修改,开发的过程中指定了软件可以遮挡个人定位以及修改个人定位,软件主要功能也是这样,男子内心明白用户会使用软件修改个人定位前提下,手机文章网站源码依然开了会员并以此谋利,所以这种方式属于违法犯罪。

       三、法院判决非常公道。

       我认为这次法院判决非常公平公正,虽然律师认为该男子可以做无罪辩解,但是我认为该男子在开发软件时,就是利用软件可以修改定位的这一特性来进行牟利,其开会员以及包年包月的付费方式,就决定了它是以这种软件特性来进行谋利,他自己内心清楚用户会使用这款软件做什么,但他没有下架软件,也没有进行阻拦,也没有提示,所以该男子的行为属于破坏网络信息系统罪,法院判决也十分公平,考虑到软件不属于破坏性程序,已经进行减刑。

开源轻松实现车牌检测与识别:yolov8+paddleocrpython源码+数据集

       大家好,我是专注于AI、AIGC、Python和计算机视觉分享的阿旭。感谢大家的支持,不要忘了点赞关注哦!

       下面是往期的一些经典项目推荐:

       人脸考勤系统Python源码+UI界面

       车牌识别停车场系统含Python源码和PyqtUI

       手势识别系统Python+PyqtUI+原理详解

       基于YOLOv8的行人跌倒检测Python源码+Pyqt5界面+训练代码

       钢材表面缺陷检测Python+Pyqt5界面+训练代码

       种犬类检测与识别系统Python+Pyqt5+数据集

       正文开始:

       本文将带你了解如何使用YOLOv8和PaddleOCR进行车牌检测与识别。首先,我们需要一个精确的车牌检测模型,通过yolov8训练,数据集使用了CCPD,一个针对新能源车牌的标注详尽的数据集。训练步骤包括环境配置、c 框架源码下载数据准备、模型训练,以及评估结果。模型训练后,定位精度达到了0.,这是通过PR曲线和mAP@0.5评估的。

       接下来,我们利用PaddleOCR进行车牌识别。只需加载预训练模型并应用到检测到的车牌区域,即可完成识别。整个过程包括模型加载、车牌位置提取、OCR识别和结果展示。

       想要亲自尝试的朋友,可以访问开源车牌检测与识别项目,获取完整的Python源码、数据集和相关代码。希望这些资源对你们的学习有所帮助!

急求pb考勤管理系统(pb+access)论文

       文字自己想办法

        一:变量说明

       1:application :

        test

       2:窗体

       login:登陆窗口

        w_main:考勤管理系统的主界面,选择操作

        w_chuli:个人考勤记录处理

       w_shengding:缺勤类型设定

       w_tongji:员工考勤统计

       w_yuangong:员工基本信息

       3:数据窗口

        dw_chuli1:个人考勤记录处理

       dw_shengding:缺勤类型设定

       dw_chuli:员工考勤统计

       w_yuangong:员工基本信息

       二:函数说明

       一:application test中的函数

       1. 函数名:test::open( )

       作用:将test这个数据库注册为当前机器的用户的数据源

       代码:

       String ls_odbc //数据库名

       String currdir = Space(), key//数据库“test”的完整路径

       Environment env

       string gs_currdir = GetCurrentDirectory()//得到运行程序的当前路径

       GetEnvironment(env)

       ls_odbc = "test"//数据库名为“test”

       currdir=GetCurrentDirectory() + "\" + ls_odbc + ".mdb"//当前运行程序路径加上数据库名就是数据库“test”的完整路径

       RegistryGet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources", ls_odbc, RegString!, key)

       if key="" then

        CHOOSE CASE env.OSType//判断操作系统的类型,注册响应的数据源的驱动

        CASE Windows!//为Windows

        RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources", ls_odbc, RegString!, "Microsoft Access Driver (*.mdb)")

        CASE WindowsNT!//为WindowsNT

        RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources", ls_odbc, RegString!, "Driver do Microsoft Access (*.mdb)")

        CASE ELSE

        END CHOOSE

       // 将数据库test注册为用户的数据源

       RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\" + ls_odbc, "", RegString!, "")

       RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\" + ls_odbc, "DBQ", RegString!, "" + currdir )

       RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\" + ls_odbc, "Driver", RegString!, "odbcjt.dll")

       RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\" + ls_odbc, "DriverId" , ReguLong!, )

       RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\" + ls_odbc, "FIL" , RegString!, "MS Access;" )

       RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\" + ls_odbc, "SafeTransactions", RegString!, "0" )

       RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\" + ls_odbc, "UID" , RegString!, "" )

       end if

       open(login)// 打开登陆窗口

       二:登陆窗口中的函数

       1:函数名:login.open()

        作用:连接到本机器数据源为test的数据库

       代码:

       SQLCA.DBMS = "ODBC"

       SQLCA.AutoCommit = False

       SQLCA.DBParm = "ConnectString='DSN=test;UID=;PWD='"

       connect;

       if sqlca.sqlcode<>0 then

        Messagebox("错误!,无法连接数据库:",sqlca.sqlerrtext)

        halt close

       end if

       2:函数名:cb1。Clicked() 即点击登陆按钮的事件

       作用:当用户输入帐号和密码后,判断是否在“操作员表”中 ,存在就打开考勤管理系统主界面

       代码:

       //定义两个变量

       string password,usename

       // 数据库连接参数

       //检索用户名和密码记录

        SELECT 操作员表.用户名,

        操作员表.密码

        INTO :usename,

        :password

        FROM 操作员表

        WHERE 操作员表.用户名 = :sle_1.text ;

       //判断用户输入的用户名是否正确

       if sle_1.text="" or sle_2.text="" then

        messagebox("错误!","用户名或密码不能为空!",exclamation!,ok!,2)

       else

       if usename=sle_1.text and password=sle_2.text then

        messagebox("通过验证!","用户名和密码正确,欢迎您使用本系统!",Information!,ok!,2)

        open(w_main)// 打开考勤管理系统主界面

        close(parent)

       else

        messagebox("错误!","用户名或密码错误,请重新输入!",exclamation!,ok!,2)

       end if

       end if

       3:函数名:cb2。Clicked() 即点击取消按钮的事件

       作用:关闭窗口

       代码:

       close(parent)

       二:主窗口中的函数

       1:函数名:rb_1。Clicked()

        作用:关闭当前窗口,打开员工基本信息窗口

        代码:open(w_yuangong)

        close(parent)

       2:函数名:rb_2。Clicked()

       作用:关闭当前窗口,打开考勤信息处理窗口

       代码:open(w_chuli)

       close(parent)

       3:函数名:rb_3。Clicked()

       作用:关闭当前窗口,打开缺勤类型设定窗口

       代码:open(w_shengding)

       close(parent)

       4:函数名:rb_4。Clicked()

       作用:关闭当前窗口,打开员工考勤统计窗口

       代码:open(w_tongji)

       close(parent)

       5:函数名:pb_1。Clicked()

        作用:关闭当前窗口

       代码:close(parent)

       三:考勤信息处理窗口中的函数

       1:函数名:open( )

        作用:将数据窗口和数据库连接,并且显示数据库存在的数据

       代码:dw_1.settransobject(sqlca)

       dw_1.retrieve()

       2:函数名:pb_1。Clicked()

       作用:插入一条新记录

       代码:dw_1.insertrow(0)

       3:函数名:pb_2。Clicked()

       作用:删除一条当前记录

       代码:dw_1.deleterow(0)

       4:函数名:pb_3。Clicked()

       作用:向数据库提交插入,删除和修改的操作,如果成功就发到数据库

       代码:

       integer returncode

        returncode=dw_1.update()

        if returncode>0 then

        commit using sqlca;

        else

        rollback using sqlca;

        end if

       4:函数名:pb_4。Clicked()

       作用:关闭当前窗口,回到主界面

       代码:

       open(w_main)

       close(parent)

       四:缺勤类型设定窗口中的函数

       1:函数名:open( )

        作用:将数据窗口和数据库连接,并且显示数据库存在的数据

       代码:dw_1.settransobject(sqlca)

       dw_1.retrieve()

       2:函数名:pb_1。Clicked()

       作用:插入一条新记录

       代码:dw_1.insertrow(0)

       3:函数名:pb_2。Clicked()

       作用:删除一条当前记录

       代码:dw_1.deleterow(0)

       4:函数名:pb_3。Clicked()

       作用:向数据库提交插入,删除和修改的操作,如果成功就发到数据库

       代码:

       integer returncode

        returncode=dw_1.update()

        if returncode>0 then

        commit using sqlca;

        else

        rollback using sqlca;

        end if

       4:函数名:pb_4。Clicked()

       作用:关闭当前窗口,回到主界面

       代码:

       open(w_main)

       close(parent)

       五:员工基本信息窗口中的函数

       1:函数名:open( )

        作用:将数据窗口和数据库连接,并且显示数据库存在的数据

       代码:dw_1.settransobject(sqlca)

       dw_1.retrieve()

       2:函数名:pb_1。Clicked()

       作用:插入一条新记录

       代码:dw_1.insertrow(0)

       3:函数名:pb_2。Clicked()

       作用:删除一条当前记录

       代码:dw_1.deleterow(0)

       4:函数名:pb_3。Clicked()

       作用:向数据库提交插入,删除和修改的操作,如果成功就发到数据库

       代码:

       integer returncode

        returncode=dw_1.update()

        if returncode>0 then

        commit using sqlca;

        else

        rollback using sqlca;

        end if

       4:函数名:pb_4。Clicked()

       作用:关闭当前窗口,回到主界面

       代码:

       open(w_main)

       close(parent)

       六:员工考勤统计窗口中的函数

       1:函数名:open( )

        作用:将数据窗口和数据库连接,并且显示数据库存在的数据

       代码:dw_1.settransobject(sqlca)

       dw_1.retrieve()

       2:函数名:ddlb_1。Selectchange()

        作用: 改变数据窗口中数据的大小

       代码:dw_1.modify('DataWindow.Zoom = '+ trim(ddlb_1.text))

       3:函数名:cb1。Clicked()

        作用: 回到数据窗口中上一页

       代码:dw_1.scrollpriorpage()

       4:函数名:cb2。Clicked()

        作用: 回到数据窗口中下一页

       代码:dw_1.scrollnextpage()

       5:函数名:cb3。Clicked()

        作用: 打印数据窗口

       代码:dw_1.print()

       6:函数名:cb4。Clicked()

        作用: 打印设置

       代码:printsetup()

       7:函数名:cb5。Clicked()

        作用: 打印预览

       代码:

       dw_1.Modify("DataWindow.Print.Orientation = '1'") //横向

       dw_1.Modify("DataWindow.Print.Orientation = '2'") //纵向

       dw_1.Modify("DataWindow.Print.Preview = yes")

       dw_1.Modify("DataWindow.Print.Preview.Rulers = yes")

       dw_1.modify('DataWindow.Print.Preview.Zoom = '+ trim(ddlb_1.text))

       8:函数名:cb5。Clicked()

        作用: 打印预览

       9:函数名:ddlb_2。Selectchange()

        作用: 改变打印预览窗口的大小

       代码:

       dw_1.modify('DataWindow.Print.Preview.Zoom = '+ trim(ddlb_2.text))

       :函数名:cb6。Clicked()

        作用: 将数据窗口中的数据保存为表格形式的文件

       代码:string ls_path, ls_file

        int li_rc

        ls_path = sle_1.Text

        li_rc = GetFileSaveName ( "Select File", ls_path, ls_file, "xls", "*.xls,*.xls" )

       //得到路径名

        IF li_rc = 1 Then

        OLEObject ole_object , ole_workbooks

       ole_object = CREATE OLEObject

       //创建Excel对象

       IF ole_object.ConnectToNewObject("Excel.Application") <> 0 THEN

        MessageBox('OLE错误','OLE无法连接!')

        return

       END IF

       ole_object.workbooks.add

       ole_object.Visible = True

       ole_workbooks = ole_object.Worksheets(1)

       ole_workbooks.cells(1,1).value="员工号"

       ole_workbooks.cells(1,2).value="时间"

       ole_workbooks.cells(1,3).value="天数"

       ole_workbooks.cells(1,4).value="类型"

       ole_workbooks.cells(1,5).value="原因"

       long l_row

       for l_row = 2 to dw_1.rowcount()+1

        ole_workbooks.cells(l_row,1).value=dw_1.getitemstring(l_row - 1,1)

        ole_workbooks.cells(l_row,2).value=dw_1.getitemstring(l_row - 1,2)

        ole_workbooks.cells(l_row,3).value=dw_1.getitemstring(l_row - 1,3)

        ole_workbooks.cells(l_row,4).value=dw_1.getitemstring(l_row - 1,4)

        ole_workbooks.cells(l_row,5).value=dw_1.getitemstring(l_row - 1,5)

       next

       ole_workbooks.SaveAs ( ls_path)

       ole_object.quit()

       Ole_Object.DisConnectObject()

       Destroy Ole_Object

       destroy ole_workbooks

       messagebox("!","文件保存到"+ ls_path)

        End If

       :函数名:sel。modify()

        作用: 将数据窗口中的数据按输入的员工号显示

       代码:

       string emp_no

       string condition

       if sle_1.text <> "" then

        emp_no=trim(sle_1.text)

        condition="emp_no="+"'"+ emp_no+"'"

        dw_1.setfilter( condition)

        filter(dw_1)

        dw_1.retrieve()

       end if

考勤作弊APP创始人二审改判4年,这样的判决是否太轻了?

       我觉得这样的判决非常合理,毕竟这个软件并没有给社会带来危害,并没有给整个计算机网络系统带来破坏性,所以这样的判决还是非常公正合理。

       我认为这一个软件APP并没有社会危害性,它只是通过不改变源代码的情况下,通过虚拟位置的信息修改了客户个人的位置,客户不想暴露自己位置时,就可以对位置进行遮挡,当客户觉得这个位置不合适时,可以随意进行修改,并没有给社会带来危害性,也没有利用软件特性带来严重后果,并且在这一起案件中,该公司的整个营业性收入并不是很高。

       一、案件始末是什么?

       整个案情非常简单,嫌疑人制作的这一款软件名字是大牛助手是一款APP通过APP客户可以进行一个前期试用,试用期过后客户需要缴纳包月费用或者包年费用费用收取并不高,客户通过APP可以对个人位置进行遮挡,别人看不到用户位置,当客户觉得对位置信息需要修改时,可以通过软件修改个人位置信息,模拟任何一个地方的定位,在地图上可以随意定位,法院认为该软件已经影响了整个计算机信息系统属于破坏计算机信息系统罪。所以对该软件创始人进行逮捕并判刑。

       二、网络上议论纷纷。

       我看到网络上很多网友在留言并且讨论这些案件,很多人认为该软件创始人并没有利用这个软件进行任何违法犯罪行为,他只是制作了一款可以修改定位的APP而已,至于用户如何使用是用户的事情,和软件创始人并没有任何关系,法院的判决有些连带责任过重,并且啊,该名创始人的软件并没有对社会造成危害,也没有造成重大损失,所以判刑有些过重,也有些人认为很多人利用软件修改定位打卡骗取工资,造成了很不好的影响,所以应该判刑。

       三、应该双面性看待这个问题。

       我觉得看待这个问题应该双面性,如果说软件开发者有些无辜,其实这种双法也并不是很准确,因为软件开发者在开发这款软件是已经会前期预料的,客户会利用软件性质进行修改定位,但是他并没有制止,并且利用这个功能开始进行包月,甚至包年公司利用这些功能进行收入,说明已经前期预料到,会有人利用这款软件的功能进行不恰当使用,虽然软件的开发和其他日常定位的APP一样,但是在功能县志上却有些不一样,所以这样的判刑也非常准确。

考勤作弊APP创始人二审改判4年,你赞成这一判决吗?

       随着社会的发展、任何单位和组织都有一定的制度、这样才能保证工作的正常进行、比如很多企业都实行打卡制、需要你到现场进行录入头像或者其他的方式、才能算作里来了或者走了、而我们知道没有任何程序是不可攻破的、毕竟“天外有天、人外有人”、前段时间一款非常火的App被下架、因为他被购买者用来作弊打卡、给很多的企业和单位造成了损失、而这个考勤作弊App的创始人二审改判四年、你赞成这一判决吗?首先不赞成这一判决、因为我们知道这个App开发出来并不是为了进行考勤作弊、而是被购买者用来做了这方面的工作、而且他的源代码只是改变了服务器的位置信息、这是一项技术、对于开发者来说被用于违法犯罪还应该追究这些使用者的责任、毕竟还要看他是否从内心就是去做考勤作弊的初衷。

       现代化的发展、涌现了一批又一批的人才、著名学者曾经说过“改变未来的人可以来自任何的地方”、就像以前我们没有汽车、而发明汽车的莱特兄弟也不过初中毕业、特别是现代技术的发展、不仅让我们的生活更加的便利、更让很多事情变得复杂、我们知道违法犯罪不能去做、但并不代表你所创造的东西没有去违法犯罪、就比如我们平时做菜所用的菜刀、它可以帮我们更方便的烹饪食物、但是也有持刀杀人抢劫的、我们并不能去怪罪厂家的错误、而在这一次考勤作弊App创始人被判两年的案件中、很多人认为这一项技术并没有直接指向考勤作弊的功能、创始人也没有在功能上解释和说明这一些、而他所给相关单位和企业带来的损失是那些个人的行为、所以不赞成这一次的判决、也希望这些人的初衷并不是去违法犯罪、而是被误会、毕竟技术是改变世界用在正道的东西。

       我们都知道“人之初性本善”、但其实人是否是善良的并不能完全确定、或者说出生的时候应该是一张白纸、只是在后面的教育和交流中改变他、所以应该从这些方面来考虑。

django如何封装api(django封装exe)

       æœ¬ç¯‡æ–‡ç« ç»™å¤§å®¶è°ˆè°ˆdjango如何封装api,以及django封装exe对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:1、(二)DjangoREST实践:最简单的RESTAPI实现2、Python3.7配合Django2.0来调用钉钉(dingding)在线api实时监测员工考勤打卡情况3、DjangoRESTframework框架之GET,POST,PUT,PATCH,DELETE等API请求接口设计(二)DjangoREST实践:最简单的RESTAPI实现

       æœ¬å°èŠ‚大概要花费分钟。

       åœ¨å‰é¢ï¼Œæˆ‘们已经学会了Django如何获得HTTP请求中的内容,以及如何获取HTTP请求的body。接下来我们就来写一个最简单的API。这个API要求在请求的HTTPbody中放入JSON格式的文本,并在解析文本后进行处理,返回JSON格式的数据。

       æˆ‘们定义API的URL为/api/sum/,功能是为两个数求和,并返回。

       request中body的格式为:

       response的格式为:

       response中,我们的数据结构稍微有点复杂。

       ä¹‹åŽæˆ‘们所有的RESTAPI都会以这种统一的格式返回数据,两个不同RESTAPI所返回内容的主要区别在data域上。

       åœ¨ï¼ˆä¸€ï¼‰ä¸­ï¼Œæˆ‘们建立了一个叫做task_platform的Django项目。目录结构如下:

       è¿›å…¥Django项目目录,并编辑task_platform中的views.py文件。

       å…¶ä¸­ï¼š

       ç¼–辑task_platform/urls.py,将我们刚刚实现的API处理函数加入到路由表中。

       è¿è¡ŒDjangoserver:

       ç”¨Postman模拟请求,可以看到:

       ç»è¿‡ç»ƒä¹ ï¼Œæˆ‘们已经了解如何实现一个简单的RESTAPI了!我们之后的API都是建立在这个通讯模型之上的(当然还有一些使用GET方法的API)。在后面,我们将看看,如何通过这种模式,实现一个用户认证系统的RESTAPI。

Python3.7配合Django2.0来调用钉钉(dingding)在线api实时监测员工考勤打卡情况

       æ–°å† ç–«æƒ…期间,大多数公司为了避免交叉感染都或多或少的采用了远程办公的方式,这显然是一个明智的选择,基本上钉钉(dingding)作为一个远程办公平台来用的话,虽然差强人意,但是奈何市面上没有啥更好的选择,矬子里拔将军,也还是可以凑合用的,不过远程办公有个问题,就是每天需要检查员工的考勤,居家办公虽然灵活,但是大家究竟有没有办公,则是另外一回事,钉钉提供的解决方案就是考勤在线打卡功能,但是检查出勤钉钉在移动端就有点费劲,需要在钉钉app里点击至少5次,还不能实时刷新,pc端的钉钉oa系统做的更烂,还不如移动端来得方便,另外如果你在一家上千人的企业里,这家企业有大大小小几十个部门,你又非常倒霉的担任这家公司的人事主管,每天按部门来出员工考勤报表就不是一件容易事了,所以利用钉钉开放的接口,使用Django自己打造一套实时监控员工考勤的web平台是我们本次的目的。

       é¡¹ç›®èƒŒæ™¯æ˜¯ä¸€å®¶æ™®é€šç§‘技公司,大概有五个部门,每个部门人左右

       é¦–先进入钉钉开放平台:open-dev.dingtalk.com

       åœ¨ä¼ä¸šå†…部开发中,选择小程序,新建一个小程序应用,这里其实也还有别的选择,比如h5微应用,主要是小程序兼容性更好一点。

       å¡«å†™åº”用的名称、简介、Logo等基本信息这些按下不表,按照要求填写即可,也不必非得填写真实信息,这里有个坑就是一定不要忘了配置安全域名或者ip,安全域名是当我们的检测平台上线的时候部署的域名,应用可以跟指定的域名进行网络通信,如果不配置的话,请求钉钉接口会报错误。

       å¦å¤–还有一个坑,也就是钉钉默认开放的接口仅限于基础权限接口

       å¦‚果需要考勤或者签到接口的话,还得单独点击申请,这就有点让人看不懂了,那么多接口,全都得靠用鼠标点击开通,不开通就用不了,这个用户体验真是让人非常酸爽,产品设计成这样,钉钉的pm难辞其咎。

       OK,前置准备工作就已经就绪了,现在我们只要根据官方文档来写接口就可以了,选择服务端api文档:

       é’‰é’‰è€ƒå‹¤æ‰“卡的接口说明是这样的:

       è¿™é‡Œæ¯ä¸ªæŽ¥å£éƒ½éœ€è¦ä¸€ä¸ªaccess_token用来鉴权,这个token是用id和秘钥通过接口交换回来的,具体在应用详情里可以获取

       è¿™é‡Œæˆ‘们封装成方法

       æžå®šäº†token,还需要获取您的部门下所有员工的员工id,因为考勤接口参数只能接受员工id,而非部门id

       æœ€åŽè¯·æ±‚考勤接口即可

       å®Œæ•´çš„后台Django后台接口

       è¿™æ ·ï¼Œå°±å¯ä»¥æ„‰å¿«çš„通过线上平台来实时监测部门员工考勤了,效果是这样的:

       DjangoRESTframework框架之GET,POST,PUT,PATCH,DELETE等API请求接口设计

       ä¸€ã€API接口功能需求:设计一些接口URL,让前端/客户请求这个URL去获取数据并显示,更改数据(增删改查),达到前后端分离的效果

       äºŒã€è®¾è®¡é€»è¾‘:通过http协议请求方式GET、POST、PUT、PATCH、DELETE设计符合RESTful规范的api接口也就是URL

       ä¸‰ã€ç®€æ˜“源码:

       3.序列化serializers

       #导入模型类和rest_framework序列化模块serializers

       from.modelsimportArticle

       fromrest_frameworkimportserializers

       #定义序列化类,使用继承ModelSerializer方法

       classArticleSerializer(serializers.ModelSerializer):

       classMeta:

       model=Article#指定序列化的模型类

       fields='_all_'#选取序列化字段,此处可自行选取字段

       4.视图函数views

       fromdjango.httpimportHttpResponse

       fromdjango.views.decorators.csrfimportcsrf_exempt

       from.modelsimportArticle

       from.serializersimportArticleSerializer

       fromrest_framework.renderersimportJSONRenderer

       fromrest_framework.parsersimportJSONParser

       #调用csrf装饰器csrf_exempt模块,解决跨域访问问题

       #JSONRenderer它将Python的dict转换为JSON返回给客户端

       #JSONParser负责将请求接收的JSON数据转换为dict

       #写法一

       #在需要跨域的视图上调用装饰器@csrf_exempt

       @csrf_exempt

       defarticle_list(request):

       ifrequest.method=='GET':

       arts=Article.objects.all()#获取模型类数据

       ser=ArticleSerializer(instance=arts,many=True)#序列化数据instance

       #下一步用rest_framework方法里的JSONRenderer方法渲染数据

       json_data=JSONRenderer().render(ser.data)

       returnHttpResponse(json_data,content_type='application/json',status=)

       #写法二

       classJSONResponse(HttpResponse):

       def_init(self,data,**kwargs):

       content=JSONRenderer().render(data)

       kwargs['content_type']='application/json'

       super(JSONResponse,self)._init(content,**kwargs)

       #根据id进行增删改操作接口

       @csrf_exempt

       defarticle_detail(request,id):

       try:

       art=Article.objects.get(id=id)

       exceptArticle.DoesNotExistase:

       returnHttpResponse(status=)

       å¤‡æ³¨ï¼š

       *写法二中定义JSONResponse类将返回的数据data与content_type返回类型做了封装

       *API接口

       GET/POST

       GET/PUT/PATCH/DELETE

       *Postman测试效果图

       django如何封装api的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于django封装exe、django如何封装api的信息别忘了在本站进行查找喔。

相关栏目:综合