1. 程式人生 > >Django2.0-驗證和授權(1)-User模型基本用法

Django2.0-驗證和授權(1)-User模型基本用法

授權系統

Django有一個內建的授權系統。包括:

  1. 使用者。
  2. 許可權。
  3. 分組。
  4. 一個可以配置的密碼雜湊系統。
  5. 一個可插拔的後臺管理系統。

預設中建立完一個django專案後,其實就已經集成了授權系統。

INSTALLED_APPS

  1. django.contrib.auth:包含了一個核心授權框架,以及大部分的模型定義。
  2. django.contrib.contenttypesContent Type系統,可以用來關聯模型和許可權。

MIDDLEWARE

  1. SessionMiddleware
    :用來管理session
  2. AuthenticationMiddleware:用來處理和當前session相關聯的使用者。

User模型

User模型是這個框架的核心部分。他的完整的路徑是在django.contrib.auth.models.User

欄位

內建的User模型擁有以下的欄位:

  1. username: 使用者名稱。150個字元以內。可以包含數字和英文字元,以及_@+.-字元。不能為空,且必須唯一!
  2. first_name:歪果仁的first_name,在30個字元以內。可以為空。
  3. last_name:歪果仁的last_name
    ,在150個字元以內。可以為空。
  4. email:郵箱。可以為空。
  5. password:密碼。經過雜湊過後的密碼。
  6. groups:分組。一個使用者可以屬於多個分組,一個分組可以擁有多個使用者。groups這個欄位是跟Group的一個多對多的關係。
  7. user_permissions:許可權。一個使用者可以擁有多個許可權,一個許可權可以被多個使用者所有用。和Permission屬於一種多對多的關係。
  8. is_staff:是否可以進入到admin的站點。代表是否是員工。
  9. is_active:是否是可用的。對於一些想要刪除賬號的資料,設定這個值為False就可以了,而不是真正的從資料庫中刪除。
  10. is_superuser:是否是超級管理員。如果是超級管理員,那麼擁有整個網站的所有許可權。
  11. last_login:上次登入的時間。
  12. date_joined:賬號建立的時間。

User模型的基本用法

建立使用者

通過create_user方法可以快速的建立使用者。預設user模型的這個方法必須要傳遞usernameemailpassword

from django.http import HttpResponse
from django.contrib.auth.models import User

def add_user(request):
    User.objects.create_user(username="jack", email="[email protected]", password=111111)
    User.objects.create_user(username="van", email="[email protected]", password=111111)
    user = User.objects.get(pk=1)
    print(user.username)
    return HttpResponse("add_user successful")

建立超級使用者

建立超級使用者有兩種方式。
第一種是使用程式碼的方式。使用create_superuser

from django.http import HttpResponse
from django.contrib.auth.models import User

def add_superuser(request):
    User.objects.create_superuser(username='superJack', email='[email protected]', password=222222)
    User.objects.create_superuser(username='superVan', email='[email protected]', password=222222)
    user = User.objects.get(username='superJack')
    print(user.email)
    return HttpResponse("add_superuser successful")

第二種通過命令列的方式。

python manage.py createsuperuser

後面就會提示你輸入使用者名稱、郵箱以及密碼。

修改密碼

因為密碼是需要經過加密後才能儲存進去的。所以如果想要修改密碼,不能直接修改password欄位,需要呼叫set_password

from django.http import HttpResponse
from django.contrib.auth.models import User


def set_password(request):
    user = User.objects.get(pk=1)
    user.email = "[email protected]"
    user.set_password(12345)  # 密碼是被雜湊過的
    user.save()  # 注意儲存
    return HttpResponse("change pk=1's password successful")

登入驗證

Django的驗證系統已經實現了登入驗證的功能。通過django.contrib.auth.authenticate即可實現。
這個方法只能通過usernamepassword來進行驗證。

from django.http import HttpResponse
from django.contrib.auth.models import User
from django.contrib.auth import authenticate

def authenticate_func(request):
    username = "van"
    password = 111111
    user = authenticate(request, username=username, password=password)
    if user:
        print("存在該使用者")
    else:
        print("使用者名稱或密碼錯誤")
    return HttpResponse("authenticate")