1. 程式人生 > >Django 實現密碼加密的使用者登入

Django 實現密碼加密的使用者登入

上一篇講解的是實現密碼不加密的使用者登入,這次講解密碼加密的使用者登入,其中配置以及HTML檔案都一樣。下面說一下改動的地方

在urls.py中繫結路由

path('one/', HashLoginView.as_view())

在views.py中建立一個通用檢視:

class HashLoginView(View):
    def get(self, request):
        return render(request, 'login.html')

    def post(self, request):
        username = request.POST.get('account')
        password = request.POST.get('password')

        # 如果密碼是加密的密碼,需要使用Django的認證函式authenticate對賬號密碼進行認證。
        """
        authenticate認證原理:
        1. 先根據使用者名稱去資料庫中查詢是否存在該使用者,如果存在該使用者,再驗證密碼是否正確,如果密碼也正確,再驗證該賬號的is_active是否被啟用(True就是激活了),如果賬號也被激活了,此時返回這個usermodel物件;
        2. 如果使用者不存在,或者使用者存在但密碼是錯的,都返回None;
        """
        user = authenticate(username=username, password=password)
        if user:
            # 說明使用者名稱和密碼都是正確的。
            # 使用login()函式盡心邏輯登入。
            login(request, user)
            # 登入成功以後,跳轉到首頁。
            return redirect('/index/')
        else:
            # 如果資料不正確,不需要跳轉url地址,也不需要跳轉頁面,就需要再渲染一下頁面,展示錯誤資訊即可。
            return render(request, 'login.html', {'error': '使用者名稱或密碼錯誤'})