django1.8認證系統(1)

注意:本文翻譯自django1.8.2的官方文檔中的:Using the Django authentication system
這份文檔介紹了在默認配置下使用django的認證系統.默認配置已經能夠滿足大部分普遍的項目需求,能處理相當廣泛的任務,對於密碼和驗證有一個相對安全的實現.如果項目需要的認證與默認配置不同,django提供了對於默認配置的認證的擴展和定製
django認證提供了身份驗證(authentication)和權限管理(authorization),通常這2個並稱爲認證系統(authentication systom),因爲它們的功能有重合(耦合)

User objects

User對象是認證系統的核心.它通常表示訪問網站的人,用於限制連接,註冊使用者資料,將內容與內容產生者關聯等.django的認證框架裏只有一個user類,也就是說,superusers 或 admin ,staff 只是擁有特殊屬性的user對象集合,與user對象是用一個類(class).
默認的user的基本屬性有:

  • username
  • password
  • email
  • first_name
  • last_name

要查看完整內容請查看full API documentation,下面的文檔是more task oriented

Creating users

創建user最直接的方式是使用內置的create_user()方法:

>>> from django.contrib.auth.models import User
>>> user = User.objects.create_user('john', '[email protected]', 'johnpassword')
# 這個時候,user是一個User對象,已經保存到數據庫了.
# 如果想改變其他字段的值,可以繼續改變它的屬性
>>> user.last_name = 'Lennon'
>>> user.save()

如果已經安裝了django admin,可以使用網頁交互,創建user

Creating superusers

使用createsuperuser命令創建superusers

$ python manage.py createsuperuser --username=joe --email=joe@example.com

會提示輸入密碼.輸入之後,會立即創建user,如果你沒有用–username或–email選項,系統會提示你輸入

Changing passwords

django不會存儲明文密碼,而是存儲一個哈希值.所以,不要直接操作user的密碼屬性.這也是爲什麼創建user時使用helper function的原因(使用了create_user,而不是通用的create).
改變user的密碼,有幾種方式:
manage.py changepassword “username”提供了在命令行改變user密碼的方法.他會提示你輸入2次.如果2次都輸入相同,新密碼會馬上改變.如果你沒有提供username,這個命令會嘗試改變最近的系統user的密碼
你也可以用編碼的方式更改密碼,使用set_password():

>>> from django.contrib.auth.models import User
>>> u = User.objects.get(username='john')
>>> u.set_password('new password')
>>> u.save()

如果安裝了django admin,你也可以在認證系統的admin網頁裏更改user的密碼
django同樣提供了views和froms可以用於用戶更改他們的密碼
django1.7新增
如果SessionAuthenticationMiddleware可用,改變密碼會註銷session.

Authenticating Users

  • authenticate(**credentials)
    要驗證給定的username和password,使用authenticate(). 它
    使用form中已經驗證格式的參數作爲關鍵字參數,默認配置下,這是username和password,如果密碼正確,它返回一個User對象.如果密碼不正確,authenticate()返回None.例如
from django.contrib.auth import authenticate
user = authenticate(username='john', password='secret')
if user is not None:
    # 驗證密碼
    if user.is_active:
        print("User is valid,active and authenticated")
    else:
        print("密碼正確,但是賬戶不可用")
else:
    # username和password沒有通過驗證
    print('用戶名或密碼不正確.')

Note:
這是比較低級的方法;例如,使用RemoteUserMiddleware.除非你自己寫認證系統,要不然你很可能用不到它.而如果你正在尋找一種方式來限制登錄用戶的訪問,請參閱login_required()裝飾器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章