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"