1. 程式人生 > >Django之auth模塊用戶認證模塊

Django之auth模塊用戶認證模塊

rep users pass dir req 痛點 use 用戶表 bsp

一、Auth模塊

1)auth模塊是什麽。登錄後臺使用的賬號密碼,則就是使用的auth模塊創建的表

Auth模塊是Django自帶的用戶認證模塊:

我們在開發一個網站的時候,無可避免的需要設計實現網站的用戶系統。
此時我們需要實現包括用戶註冊、用戶登錄、用戶認證、註銷、修改密碼等功能,這還真是個麻煩的事情呢。
Django作為一個完美主義者的終極框架,當然也會想到用戶的這些痛點。它內置了強大的用戶認證系統--auth,
它默認使用 auth_user 表來存儲用戶數據。

2)auth模塊的功能

2.1)導入auth模塊

from django.contrib import auth

2.2)auth模塊下的方法。authenticate()。認證功能

提供了用戶認證功能,即驗證用戶名以及密碼是否正確,一般需要username 、password兩個關鍵字參數。
如果認證成功(用戶名和密碼正確有效),便會返回一個 User 對象。
authenticate()會在該 User 對象上設置一個屬性來標識後端已經認證了該用戶,且該信息在後續的登錄過程中是需要的。
用法:
user = authenticate(username=usernamer,password=password)

具體使用如下

技術分享圖片
from django.contrib import auth
def auth_test(request):
    username 
= request.POST[username] password = request.POST[password] user = auth.authenticate(username=username, password=password) if user: print(user.username) return HttpResponse("登錄成功") return HttpResponse("登錄失敗")
authenticate使用

2.3)login(request,user)。登錄功能(認證成功後)

技術分享圖片
from
django.contrib import auth def auth_test(request): user = auth.authenticate(request,username=user2,password=user123456) # 認證 print(user) if user: print(user.username) # 登錄的用戶名 auth.login(request,user) return render(request,auth_test.html)
auth.login(request,user)

登錄後,前端也可獲取到登錄的用戶名

技術分享圖片
<body>
<div>{{ request.user }}</div>
</body>
{{ request.user }}

在前端也可判斷請求是否通過。

技術分享圖片
<body>
<div>{{ request.user }}</div>
<div>{{ request.user.is_authenticated }}</div>
</body>
is_authenticated

2.4)auth.logout(request)。用戶退出方法

技術分享圖片
def auth_test_logout(request):
    auth.logout(request)
    return HttpResponse(退出成功)
auth.logout(request)

二、auth模塊擴展。用於創建用戶,登錄裝飾器

1)新增字段

1.1)修改配置文件settings.py

技術分享圖片
# AUTH_USER_MODEL = "app名.用戶名表"
AUTH_USER_MODEL = "app01.UserInfo"  # 指定表
settings.py

1.2)創建的表,繼承AbstractUser。可重寫表結構

技術分享圖片
from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
    nid = models.AutoField(primary_key=True)
    telephone = models.CharField(max_length=32)
AbstractUser

2)創建用戶

技術分享圖片
def auth_test_creat_user(request):
    # 管理員
    UserInfo.objects.create_superuser(username=usersb1,password=123,email=[email protected])
    # 普通用戶
    UserInfo.objects.create_user(username=usersb2,password=123,email=[email protected])
    return HttpResponse(成功)
creat_user

3.1)登錄裝飾器方法一。視圖函數前加上url

技術分享圖片
@login_required(login_url=/auth_test_login/)   # 登錄以後才能有的操作
def auth_test_logout(request):
    auth.logout(request)
    return HttpResponse(退出成功)
@login_required

login_url=‘/auth_test_login/‘,沒有登錄跳轉到的url

3.2)登錄裝飾器方法二。settings全局配置

技術分享圖片
LOGIN_URL = /auth_test_login/
settings.py

視圖函數前就不用加url了

技術分享圖片
@login_required   # 登錄以後才能有的操作
def auth_test_logout(request):
    auth.logout(request)
    return HttpResponse(退出成功
View Code

4)檢查密碼。check_password(password)。

密碼正確返回True,否則返回False。

技術分享圖片
check_password(password)
auth 提供的一個檢查密碼是否正確的方法,需要提供當前請求用戶的密碼。

tag = user.check_password(密碼)
if tag:
    print("ok")
else:
    print("錯誤")
check_password(‘密碼‘)

5)修改密碼。set_password(password)

技術分享圖片
auth 提供的一個修改密碼的方法,接收 要設置的新密碼 作為參數。
註意:設置完一定要調用用戶對象的save方法!!!
用法:
user.set_password(password=‘‘)
user.save()
set_password(password=‘‘)

一個簡單的修改密碼示例

技術分享圖片
@login_required
def set_password(request):
    user = request.user
    err_msg = ‘‘
    if request.method == POST:
        old_password = request.POST.get(old_password, ‘‘)
        new_password = request.POST.get(new_password, ‘‘)
        repeat_password = request.POST.get(repeat_password, ‘‘)
        # 檢查舊密碼是否正確
        if user.check_password(old_password):
            if not new_password:
                err_msg = 新密碼不能為空
            elif new_password != repeat_password:
                err_msg = 兩次密碼不一致
            else:
                user.set_password(new_password)
                user.save()
                return redirect("/login/")
        else:
            err_msg = 原密碼輸入錯誤
    content = {
        err_msg: err_msg,
    }
    return render(request, set_password.html, content)
View Code

6)User對象的屬性

技術分享圖片
User對象屬性:username, password
is_staff : 用戶是否擁有網站的管理權限.
is_active : 是否允許用戶登錄, 設置為 False,可以在不刪除用戶的前提下禁止用戶登錄。
View Code

三、總結(auth模塊使用)

配置文件:settings.py
    AUTH_USER_MODEL = "app01.UserInfo"  # 創建擴展用戶表
    LOGIN_URL = /auth_test_login/        # 裝飾器的跳轉登錄url
創建表:models.py    
    from django.contrib.auth.models import AbstractUser        # 繼承 AbstractUser
    class UserInfo(AbstractUser):
        nid = models.AutoField(primary_key=True)
        telephone = models.CharField(max_length=32)
視圖函數方法:views.py
    auth.authenticate(request,username=user2,password=user123456)    # 認證
    auth.login(request,user)    # 登錄
    print(request.user)            # 屬性,用戶名
    request.user.is_authenticated    # 屬性,判斷請求是否通過
    
    @login_required                # 裝飾器
    UserInfo.objects.create_superuser()        # 創建超級管理員
    UserInfo.objects.create_user()            # 創建普通管理員
    check_password(password)    # 檢查密碼
    set_password(password)        # 修改密碼
    
前端文件:
    request請求體裏面含有user對象
    後端有的屬性,前端也能獲取到
    {{ request.user }}
    {{ request.user.is_authenticated }}

Django之auth模塊用戶認證模塊