1. 程式人生 > 實用技巧 >auth模組

auth模組

auth是django自帶的一個認證模組,主要用在使用者登入。

下面進行簡單的介紹幾種方法:

authenticate,login(HttpRequest,user),create_superuser(),logout(request),create_user(),login_requierd(),set_password(password),
check_password(password),is_authenticated(),

auth的匯入

from django.contrib import auth

authenticate() # 驗證使用者名稱密碼是否正確,認證成功後返回user物件

user = authenticate(username='usernamer',password='password')

login(HttpRequest,user)

該函式接收一個HttpRequest物件和一個經過認證的User物件

該函式實現了使用者登入,本質上後端會生成一個相關的session資料

from django.contrib.auth import authenticate, login
   
def my_view(request):
  username = request.POST['username']
  password = request.POST['
password'] user = authenticate(username=username, password=password) if user is not None: login(request, user) # Redirect to a success page. ... else: # Return an 'invalid login' error message. ...

logout(request)

該函式接受一個HttpRequest物件,無返回值。

當呼叫該函式時,當前請求的session資訊會全部清除。該使用者即使沒有登入,使用該函式也不會報錯。

from django.contrib.auth import logout
   
def logout_view(request):
    logout(request)

is_authenticated()

用來判斷當前請求是否通過了認證。

def my_view(request):
  if not request.user.is_authenticated():
    return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))

login_requierd()

auth 給我們提供的一個裝飾器工具,用來快捷的給某個檢視新增登入校驗。

from django.contrib.auth.decorators import login_required
      
@login_required
def my_view(request):
    pass

若使用者沒有登入,則會跳轉到django預設的 登入URL '/accounts/login/ ' 並傳遞當前訪問url的絕對路徑 (登陸成功後,會重定向到該路徑)。

如果需要自定義登入的URL,則需要在settings.py檔案中通過LOGIN_URL進行修改。

LOGIN_URL = '/login/'  # 這裡配置成你專案登入頁面的路由

create_user()

auth 提供的一個建立新使用者的方法,需要提供必要引數(username、password)等。

用法:

from django.contrib.auth.models import User
user = User.objects.create_user(username='使用者名稱',password='密碼',email='郵箱',...)

create_superuser()

auth 提供的一個建立新的超級使用者的方法,需要提供必要引數(username、password)等。

用法:

from django.contrib.auth.models import User
user = User.objects.create_superuser(username='使用者名稱',password='密碼',email='郵箱',...)

check_password(password)

auth 提供的一個檢查密碼是否正確的方法,需要提供當前請求使用者的密碼。

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

用法:

ok = user.check_password('密碼')

set_password(password)

auth 提供的一個修改密碼的方法,接收 要設定的新密碼 作為引數。

注意:設定完一定要呼叫使用者物件的save方法!!!

user.set_password(password='')
user.save()

擴充套件預設的user表

我們可以通過繼承內建的 AbstractUser 類,來定義一個自己的Model類。

這樣既能根據專案需求靈活的設計使用者表,又能使用Django強大的認證系統了。

from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
    """
    使用者資訊表
    """
    nid = models.AutoField(primary_key=True)
    phone = models.CharField(max_length=11, null=True, unique=True)
    
    def __str__(self):
        return self.username

注意:

按上面的方式擴充套件了內建的auth_user表之後,一定要在settings.py中告訴Django,我現在使用我新定義的UserInfo表來做使用者認證。寫法如下:

# 引用Django自帶的User表,繼承使用時需要設定
AUTH_USER_MODEL = "app名.UserInfo"