用戶登錄與登出

1.用戶登錄

Django 中實現(xiàn)用戶的登錄需要兩個方法:authenticate(username, password)login(request, user),它們位于 django.contrib.auth 模塊中。

  • authenticate(username, password) 函數(shù)需要兩個參數(shù) username、password,如果校驗通過則返回 User 對象,如果校驗不通過返回 None。

  • login(request,user) 接受兩個參數(shù),第一個是 request 對象,第二個是 user 對象。login 方法使用 SessionMiddleware 將 userID 存入 session 當中。

# 用戶模型
from django.contrib.auth.models import User

# 用戶驗證模塊
from django.contrib.auth import authenticate, login

# 用戶登錄
def user_login(request):

    username = 'diego'
    password = '12345678xxxxxx'

    # 驗證用戶名和密碼是否匹配
    user = authenticate(username=username, password=password)

    if user is not None:
        if user.is_active:
            # 登錄該用戶
            login(request, user)
            return HttpResponse('你已成功登錄')
        else:
            return HttpResponse('沒有該用戶或密碼錯誤')
    else:
        return HttpResponse('沒有該用戶或密碼錯誤')




2.用戶登出

我們使用 django.contrib.auth.logout 方法來登出用 django.contrib.auth.login 函數(shù)登入的用戶。

使用 logout(requet) 函數(shù)登出用戶,該函數(shù)只有一個參數(shù),就是 request。沒有返回值,而且即使當前用戶沒有登陸也不會拋出任何異常。

# 用戶登出模塊
from django.contrib.auth import logout

# 用戶登出
def user_logout(request):
    logout(request)
    # 這里可以使用重定向到所需的頁面




3.獲取當前用戶

在 view 中,我們可以使用 request.user 獲取當前的登陸用戶 User 對象。如果當前用戶沒有登陸,那么 request.user 將返回 AnonymousUser 對象。獲取了 User 對象之后,我們就可以對該對象執(zhí)行某些方法或獲取其屬性:

>>> print(request.user)
diego

# 獲取用戶名
>>> print(request.user.username)
diego

# 判斷是否存在登錄用戶
>>> print(request.user.is_authenticated())
True




4.login_required

login_required() 裝飾器函數(shù)做了以下事情:

  • 如果當前用戶沒有登陸,跳轉到 settings.LOGIN_URL,并傳遞當前的絕對路徑到 URL 請求參數(shù)中,例如:/accounts/login/?next=/polls/3/

  • 如果當前用戶已經(jīng)登陸了,執(zhí)行 view 方法。在 view 中的方法可以認為當前用戶已經(jīng)登陸了。

login_required() 方法接受兩個參數(shù):

  • redirect_field_name:默認值是 next。用來定義登陸成功之后的跳回之前訪問界面的 url,如果不想出現(xiàn)默認值,設置為空值即可。

  • login_url:默認值是 settings.LOGIN_URL。用來指定登陸界面的 url。如果不傳入改參數(shù),就需要確保 settings.LOGIN_URL 的值是正確設置的。

現(xiàn)在網(wǎng)站有一個用戶個人頁面,只給當前登錄的用戶瀏覽,未登錄用戶訪問這個頁面則會跳轉到登錄頁,要實現(xiàn)該效果可以這樣:

# 需要登錄模塊,某個頁面如果需要用戶登錄后才能瀏覽就需要用到該模塊
from django.contrib.auth.decorators import login_required

# 用戶個人頁面
# 如果未登錄用戶訪問該頁面則會跳轉到 user_login 頁
@login_required(login_url='user_login', redirect_field_name='')
def user_info(request):
    context = {}
    user = request.user
    context['user'] = user
    return render(request, 'user_info.html', context)

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容