【python】django实现扫码签到
功能分析
基础学习
实现思路
动手
前端
功能分析
核心需求
- 能统计到场人员状况
- 在现场的人能够证实本身在现场
- 不在现场的人不能证实本身在现场
- 系统可以辨别和记录收到的证实
- 系统能保存和显示统计状况
一个基本的扫码签到系统:python
- 访问指定URL能出来二维码
- 管理员登录后才能访问URL
- 后端产生二维码
- 二维码发送到前端
- 二维码在前端显示出来
- 二维码能定时更新
- 扫码以后能执行一些操做
- 用户设备扫码后能发出数据包
- 构造可以独特标识用户身份的数据包
- 数据包可以自证来源合法
- 后端能接收、处理收到的数据包
- 验证数据包来源合法性,时效性
- 提取用户信息
- 增删数据库内容,更新签到状况
- 给用户的扫码设备反馈
- 给二维码页面反馈
一个实用的扫码签到系统:ajax
- 安全性
- 不可伪造
- 二维码页面的访问控制
- 二维码的时效性
- 数据包的用户身份标识
- 难以攻击
- 鲁棒性
- 同一管理员多个会话
- 多个管理员多个会话
- 面对大规模请求不丢包
- 用户体验
- 二维码、签到页面好看、有趣、多变
- 扫码后的反馈页面好看、有趣、多变
- 扫码后的反馈页面响应快
- 签到页面显示已签人数等
- 二维码附近显示页面更新倒计时
- 签到后可发弹幕,但可能引入更多安全性问题
基础学习
- python基本语法
- qrcode包的使用
- django工做流程,工程和app的目录结构
- django先后端数据如何传输
- django的基本命令和HttpResponse的构造
- django模板语言的语法
- django模板的编写和调用
- django中的访问控制和数据库操做
实现思路
一个基本的扫码签到系统:
- 访问指定URL能出来二维码
- 管理员登录后才能访问URL
带cookie访问,未登陆则重定向到登陆界面
- 二维码的产生,传送和显示
用qrcode产生指定内容的二维码。一种思路是后端把图片写到文件里,前端去读取。优势是思路清晰,操做方式经典,看上去好实现;缺点是页面更新较快,频繁读写不优雅,而且由于对static文件比较懵逼致使在本地调试时图片路径搞不清楚,页面老是显不出图。另外一种思路是不读写文件,而是把二维码以某种数据结构直接传给前端。优势是不读写磁盘,知足了有点强迫症的心理,缺点是不知道怎么搞。而后想到ctf里把图片按base64编码的小trick,再加上这些二维码数据量都不大,因而决定就这么干。测试后发现img=qrcode.make(token);buf=StringIO();img.save(buf);imgdata=bug.getvalue();
后这个imgdata就是个字符串,那就data=base64.b64encode(imgdata);
一下,用render()
传给前端的img做src,即<img src="data:img/png;base64,{{data}}">
。
- 二维码能定时更新
想过用ajax,但不懂的东西有点多,就先用<meta http-equiv="refresh" content="15">
替代了
to be continued...
数据库
- 扫码以后能执行一些操做
- 用户设备扫码后能发出数据包
- 构造可以独特标识用户身份的数据包
- 数据包可以自证来源合法
- 后端能接收、处理收到的数据包
- 验证数据包来源合法性,时效性
- 提取用户信息
- 增删数据库内容,更新签到状况
- 给用户的扫码设备反馈
- 给二维码页面反馈
一个实用的扫码签到系统:django
- 安全性
- 鲁棒性
- 同一管理员多个会话
- 多个管理员多个会话
- 面对大规模请求不丢包
- 用户体验
- 二维码、签到页面好好看、有趣、多变
- 扫码后的反馈页面好看、有趣、多变
- 扫码后的反馈页面响应快
- 签到页面显示已签人数等
- 二维码附近显示页面更新倒计时
- 签到后可发弹幕,可能引入更多安全性问题
动手
欢迎关注本站公众号,获取更多信息