【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
- 安全性
- 魯棒性
- 同一管理員多個會話
- 多個管理員多個會話
- 面對大規模請求不丟包
- 用戶體驗
- 二維碼、簽到頁面好好看、有趣、多變
- 掃碼後的反饋頁面好看、有趣、多變
- 掃碼後的反饋頁面響應快
- 簽到頁面顯示已籤人數等
- 二維碼附近顯示頁面更新倒計時
- 簽到後可發彈幕,可能引入更多安全性問題
動手
歡迎關注本站公眾號,獲取更多信息