django 使用配置文件實現登錄方式(人臉、密碼、刷卡、指紋等)的自定義選擇

問題引出

網站登錄系統,目前開發了人臉識別登錄(見我寫的博文)、賬號密碼登錄、刷卡登錄三個功能,後期可以擴展指紋登錄等。
但是對於不同的應用場景需要不同的登錄方式,因此針對不同場景定製系統很有必要。比如在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

在這裏插入圖片描述
在這裏插入圖片描述

本文由二賽君整理髮布,轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章