Django的用戶認證組件
阿新 • • 發佈:2018-07-09
con imp 登陸 djang ssi edi sessionid 否則 logo
用戶認證:
auth模塊:
from django.contrib import auth
1.1 authenticate()
提供了用戶認證,如果認證信息有效,會返回一個User對象。
user = auth.authenticate(username=user,password = pwd) # 用戶驗證:成功則返回user對象,否則返回None
1.2 login(request,user):
該函數接收一個HttpRequest對象,以及一個認證了的user對象,此函數使用django的session框架給某個已認證的用戶附加上sessionid 等信息。
from django.contrib import auth def login(request): if request.method == "POST": user = request.POST.get("user") pwd = request.POST.get("pwd") user = auth.authenticate(username=user,password = pwd) # 用戶驗證:成功則返回user對象,否則返回None if user: auth.login(request,user)# 這一步相當於登陸成功後,註冊session, return redirect("/index/") return render(request,"login.html")
1.3 logout(request) 註銷用戶
def logout(request): auth.logout(request) # 註銷 return redirect("/login/")
該函數接收一個HttpRequest對象,無返回值,當調該函數時,當前請求的session信息會全部清除,該用戶即使沒有登陸,使用該函數也不會報錯。
User對象:
User對象屬性:username,password(必填項),password用哈希算法保存到數據庫。
2.1 User對象的 is_authenticated:
如果是真正的 User 對象,返回值恒為 True 。 用於檢查用戶是否已經通過了認證。
通過認證並不意味著用戶擁有任何權限,甚至也不檢查該用戶是否處於激活狀態,這只是表明用戶成功的通過了認證。 這個方法很重要, 在後臺用request.user.is_authenticated判斷用戶是否已經登錄,如果true則可以向前臺展示request.user.name
要求:
1 用戶登陸後才能訪問某些頁面,
2 如果用戶沒有登錄就訪問該頁面的話直接跳到登錄頁面
3 用戶在跳轉的登陸界面中完成登陸後,自動訪問跳轉到之前訪問的地址
註意:
在django1.1以後,is_authenticated 由方法(即 is_authenticated) 變成了靜態方法即(is_authenticate) 就可以調用了。
def index(request): print(request.user.id) print(request.user.username) if not request.user.is_authenticated: return redirect("/login/") return render(request,"index.html")
2.2,創建用戶:
def register(request): User.objects.create_user(username="egon",password=123) User.objects.create_superuser(username=‘yuan‘,password=123) # create_user 創建普通用戶 # create_superuser 創建超級用戶 return redirect("/login/")
Django的用戶認證組件