from django.contrib import auth
python
默認Auth表單django
auth
默認是使用自帶的user
表單後端
必定要在settings.py
中告訴Django
,我如今使用我新定義的UserInfo
表來作用戶認證。寫法以下:session
# 引用Django自帶的User表,繼承使用時須要設置 AUTH_USER_MODEL = "app名.UserInfo"
在modles.py
建立表單模型能夠對AbstractUser
進行繼承由於咱們能夠從源碼中看出來auth自帶的user表示繼承AbstractUser
類,全部咱們能夠能夠一樣繼承而後對於他的內容進行自定義app
from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser): 新增的內容 經過源碼咱們能夠看出自帶的幾個內容
AbstractUser
自帶的字段函數
源碼裏的內容
工具
username :帳號 first_name:姓 last_name:名 email:郵箱 is_staff : 用戶是否擁有網站的管理權限. is_active: 是否容許用戶登陸, 設置爲 False,能夠在不刪除用戶的前提下禁止用戶登陸。 date_joined:建立日期
再看他的父級AbstractBaseUser
網站
password:密碼 last_login:最後一次登入時間 is_active:是否容許用戶登陸, 設置爲 False,能夠在不刪除用戶的前提下禁止用戶登陸。
再看他的另外的父級PermissionsMixin
ui
is_superuser:是否爲超級帳號也就管理員 groups:分組 user_permissions:用戶權限
咱們能夠再這基礎上進行新增url
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='郵箱',...)
authenticate()
提供了用戶認證功能,即驗證用戶名以及密碼是否正確,通常須要username 、password兩個關鍵字參數。
若是認證成功(用戶名和密碼正確有效),便會返回一個 User 對象。
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. ...
這樣設置以後能夠直接request.user
點出其帳號相關信息
is_authenticated
爲True
logout(request)
該函數接受一個HttpRequest對象,無返回值。
當調用該函數時,當前請求的session信息會所有清除。該用戶即便沒有登陸,使用該函數也不會報錯。
用法:
from django.contrib.auth import logout def logout_view(request): logout(request) # Redirect to a success page.
這樣設置以後能夠直接request.user
就爲空
is_authenticated
爲False
is_authenticated()
用來判斷當前請求是否經過了認證。
用法:
def my_view(request): if not request.user.is_authenticated(): return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
頁面中操做
{% if request.user.is_authenticated %} 若是裏面有經過驗證的user就爲真沒有就沒否
login_requierd()
auth 給咱們提供的一個裝飾器工具,用來快捷的給某個視圖添加登陸校驗。
用法:
from django.contrib.auth.decorators import login_required @login_required def my_view(request): ...
若用戶沒有登陸,則會跳轉到django默認的 登陸URL '/accounts/login/ ' 並傳遞當前訪問url的絕對路徑 (登錄成功後,會重定向到該路徑)。
若是須要自定義登陸的URL,則須要在settings.py文件中經過LOGIN_URL進行修改。
示例:
LOGIN_URL = '/login/' # 這裏配置成你項目登陸頁面的路由
check_password(password)
auth 提供的一個檢查密碼是否正確的方法,須要提供當前請求用戶的密碼。
密碼正確返回True,不然返回False。
用法:
ok = user.check_password('密碼')
set_password(password)
auth 提供的一個修改密碼的方法,接收 要設置的新密碼 做爲參數。
注意:設置完必定要調用用戶對象的save方法!!!
用法:
user.set_password(password='') user.save()
上面的寫的都是基於auth自帶的user表達寫的
導入
from django.contrib.auth.models import User
若是是自定義表單,請把user換成你自定義的表單名稱