1. 程式人生 > >Django的用戶認證組件

Django的用戶認證組件

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的用戶認證組件