Django內置模塊auth實現認證功能代碼
阿新 • • 發佈:2018-06-24
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實現認證功能代碼