Django2.0-驗證和授權(1)-User模型基本用法
阿新 • • 發佈:2018-12-16
授權系統
Django
有一個內建的授權系統。包括:
- 使用者。
- 許可權。
- 分組。
- 一個可以配置的密碼雜湊系統。
- 一個可插拔的後臺管理系統。
預設中建立完一個django
專案後,其實就已經集成了授權系統。
在INSTALLED_APPS
中
django.contrib.auth
:包含了一個核心授權框架,以及大部分的模型定義。django.contrib.contenttypes
:Content Type
系統,可以用來關聯模型和許可權。
在MIDDLEWARE
中
SessionMiddleware
session
。AuthenticationMiddleware
:用來處理和當前session
相關聯的使用者。
User模型
User
模型是這個框架的核心部分。他的完整的路徑是在django.contrib.auth.models.User
。
欄位
內建的User
模型擁有以下的欄位:
username
: 使用者名稱。150個字元以內。可以包含數字和英文字元,以及_
、@
、+
、.
和-
字元。不能為空,且必須唯一!first_name
:歪果仁的first_name
,在30個字元以內。可以為空。last_name
:歪果仁的last_name
email
:郵箱。可以為空。password
:密碼。經過雜湊過後的密碼。groups
:分組。一個使用者可以屬於多個分組,一個分組可以擁有多個使用者。groups
這個欄位是跟Group
的一個多對多的關係。user_permissions
:許可權。一個使用者可以擁有多個許可權,一個許可權可以被多個使用者所有用。和Permission
屬於一種多對多的關係。is_staff
:是否可以進入到admin
的站點。代表是否是員工。is_active
:是否是可用的。對於一些想要刪除賬號的資料,設定這個值為False
就可以了,而不是真正的從資料庫中刪除。is_superuser
:是否是超級管理員。如果是超級管理員,那麼擁有整個網站的所有許可權。last_login
:上次登入的時間。date_joined
:賬號建立的時間。
User模型的基本用法
建立使用者
通過create_user
方法可以快速的建立使用者。預設user
模型的這個方法必須要傳遞username
、email
、password
。
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
即可實現。
這個方法只能通過username
和password
來進行驗證。
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")