從新整理django中Auth模塊

0907自我總結

從新整理django中Auth模塊

from django.contrib import authpython

一.設置

默認Auth表單django

auth默認是使用自帶的user表單後端

自定義Auth表單

必定要在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,能夠在不刪除用戶的前提下禁止用戶登陸。

再看他的另外的父級PermissionsMixinui

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')

將登入的對象存放在request中

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_authenticatedTrue

將登入的對象存放在request中去除

logout(request)

該函數接受一個HttpRequest對象,無返回值。

當調用該函數時,當前請求的session信息會所有清除。該用戶即便沒有登陸,使用該函數也不會報錯。

用法:

from django.contrib.auth import logout
   
def logout_view(request):
  logout(request)
  # Redirect to a success page.

這樣設置以後能夠直接request.user就爲空

is_authenticatedFalse

經過認證

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換成你自定義的表單名稱

相關文章
相關標籤/搜索