1. 程式人生 > >Django內置模塊auth實現認證功能代碼

Django內置模塊auth實現認證功能代碼

span 設置 super nbsp 默認 cor 超級用戶 AR object

auth 模塊的知識點,

一,用戶認證

1,創建超級用戶(此步之所以這麽做,是用於將用戶名密碼使用命令寫入auth_user表中

(此表不能手工寫,因為password是加密後的字串))

python manage.py createsuperuser

輸入用戶名 xiaohei

輸入郵箱。。。。

輸入密碼xiaohei1234

去數據庫裏就能看到auth插件,auth_user表對應的信息了

技術分享圖片

二,views.py中的核心代碼

2.1導入模塊

from django.contrib import auth

2.2 驗證用戶名和密碼(如果驗證成功返回的是一個user對象,如果驗證失敗則得到一個匿名用戶,此用戶所有屬性是null)

user=auth.authenticate(username=username1,password=pwd)

2.3 將以上通過驗證的user用戶ID保存在session中,供auth中間件使用

auth.login(request,user)

2.4

後面會用於中間件,將user封裝到request.user的屬性中

‘django.contrib.auth.middleware.AuthenticationMiddleware‘, ------中間件

以下第二步驟代碼歸納如下:

from django.contrib import auth
def login(request):
    
if request.method==POST: username1=request.POST.get(username) pwd=request.POST.get(password) # 如何判斷用戶名和密碼呢 # 以下是使用auth模塊,去數據庫裏查詢用戶信息,驗證是否存在 user=auth.authenticate(username=username1,password=pwd) # 以下語句,其實還是將以上獲得認證的用戶ID保存在SESSION中,#用於後面每個頁面根據此SESSION裏的ID,獲取用戶信息驗證,並給auth中間件使用
auth.login(request,user) # 用於以後在調用每個視圖函數前,auth中間件會根據每次訪問視圖前請求所帶的SEESION裏面的ID,去數據庫找用戶對像,並將對象保存在request.user屬性中 # 中間件執行完後,再執行視圖函數 if user: return redirect(/index/) else: return redirect(/login/) return render(request,login.html)

三,需要進行驗證頁面的驗證(使用auth模塊裏的裝飾器login_required)

from django.contrib.auth.decorators import login_required
# 以上導入的就是一個裝飾器,用於驗證(我們需要用戶登錄後,才能訪問,否則就跳轉到另外的頁面)
# 這個另外的頁面就默認的是/accounts/login/ 我們也也以自定義要跳轉的地方,在settins.py中LOGIN_URL

# 例如以下頁面需要登錄成功才能訪問
@login_required
def index(request):
    print(request.user.username)
    print(====*12)
    return render(request,index.html)

四,如果沒有登錄則跳轉到另外的頁面,這個頁面是可以設置的,

# 這個另外的頁面就默認的是/accounts/login/ 我們也也以自定義要跳轉的地方,在settins.py中LOGIN_URL

settings.py文件中寫以下代碼,指定沒有登錄跳轉到登錄頁面
LOGIN_URL=/login/

五,用戶註銷

以下是views.py註銷代碼

from django.contrib.auth.decorators import login_required
# 以上導入的就是一個裝飾器,用於驗證(我們需要用戶登錄後,才能訪問,否則就跳轉到另外的頁面)
# 這個另外的頁面就默認的是/accounts/login/ 我們也也以自定義要跳轉的地方,在settins.py中LOGIN_URL

# 註銷,將session數據都刪除,並且coolies也失效,(即用戶退出登錄,並不銷戶清除數據庫裏user記錄哦。。)
def logout(request):
    auth.logout(request)
    return redirect(/login)

六,註冊(創建用戶)

# 創建用戶,即註冊
def register(request):
    from django.contrib.auth.models import User
    User.objects.create(username=alex,password=alex1234)
    return HttpResponse(o98k)

調用register視圖函數後,即創建成功後,數據庫裏的auth_user表就有對應數據了,

技術分享圖片

Django內置模塊auth實現認證功能代碼