問題引出
網站登錄系統,目前開發了人臉識別登錄(見我寫的博文)、賬號密碼登錄、刷卡登錄三個功能,後期可以擴展指紋登錄等。
但是對於不同的應用場景需要不同的登錄方式,因此針對不同場景定製系統很有必要。比如在A場景下只需要人臉識別登錄功能,在B場景下需要刷卡,在C場景下需要刷卡或密碼等。
解決方案
- 本系統使用的是Django開發,MVC架構。
解決思路
在目錄下新建一個配置文件,通過修改配置文件的字段屬性,改變系統的登錄功能。
1 配置文件
在根目錄下新建config.ini,寫入如下內容:
# LOGIN METHOD SWITCH
[Login-Setting]
useCamera = False
usePassword = True
useIDCard = True
useFingerPrint = False
其中True爲開始該功能,False爲關閉該功能。
2 登錄頁面views函數
進入登錄頁面時,調用login_sys(request)函數,在函數中添加讀取配置文件功能,具體代碼實現如下:
# 登陸頁面
def login_sys(request):
# 首先判斷是否已經登陸
if request.user.is_authenticated:
return HttpResponseRedirect("/")
else:
################## 讀取配置文件,判斷登錄方式 ######################
import configparser
cf = configparser.ConfigParser()
cf.read('config.ini')
useCamera = cf.get('Login-Setting', 'useCamera')
usePassword = cf.get('Login-Setting', 'usePassword')
useIDCard = cf.get('Login-Setting', 'useIDCard')
useFingerPrint = cf.get('Login-Setting', 'useFingerPrint')
##################################################################
if useCamera == 'True':
# 加載頁面時,加載人臉庫
# message = checkCameras()
loadAllAuthFaces()
return render(request, 'user_manage/login.html', locals())
其中ini配置文件的讀取,用configparser模塊,具體使用參考https://zhuanlan.zhihu.com/p/33218385
3 模板html文件
從login_sys(request)執行完之後,返回渲染login.html,在模板中判斷是否使用相機、是否使用賬號密碼、是否使用刷卡等,開啓相關的html代碼。主要功能實現如下:
<!-- Swiper -->
<div class="swiper-container">
<div class="swiper-wrapper" >
{% ifequal useCamera 'True' %}
<div class="swiper-slide">
{# 相關html代碼 #}
</div>
{% endifequal %}
{% ifequal usePassword 'True' %}
<div class="swiper-slide">
{# 相關html代碼 #}
</div>
{% endifequal %}
{% ifequal useIDCard 'True' %}
<div class="swiper-slide">
{# 相關html代碼 #}
</div>
{% endifequal %}
{% ifequal useFingerPrint 'True' %}
<div class="swiper-slide">
{# 相關html代碼 #}
</div>
{% endifequal %}
</div>
<!-- Add Pagination -->
<div class="swiper-pagination"></div>
</div>
實現起來很簡單,就是根據views函數返回的變量值是否開啓相關代碼模塊。
4 實現效果
使用了swiper.js,向右滑動切換slide
示例1:全開啓
# LOGIN METHOD SWITCH
[Login-Setting]
useCamera = True
usePassword = True
useIDCard = True
useFingerPrint = False # 此功能未開發
示例2:僅刷卡
# LOGIN METHOD SWITCH
[Login-Setting]
useCamera = False
usePassword = False
useIDCard = True
useFingerPrint = False
示例3:賬號密碼和刷卡
# LOGIN METHOD SWITCH
[Login-Setting]
useCamera = False
usePassword = True
useIDCard = True
useFingerPrint = False
本文由二賽君整理髮布,轉載請註明出處。