在開(kāi)發(fā)一個(gè)網(wǎng)站時(shí),經(jīng)常會(huì )用到用戶(hù)的注冊和登陸相關(guān)的賬號管理功能,auth模塊是Django提供的標準權限管理系統,可以提供用戶(hù)身份認證, 用戶(hù)組和權限管理。
像用戶(hù)注冊、用戶(hù)登錄、用戶(hù)認證、注銷(xiāo)、修改密碼等功能都不需要我們去開(kāi)發(fā),這些功能django已經(jīng)早就設計好了。
當我們執行makemigrations和migrate數據庫遷移的時(shí)候,會(huì )自動(dòng)新增一個(gè)auth_user表,用戶(hù)存放用戶(hù)賬號密碼等相關(guān)信息。
創(chuàng )建超級管理員用戶(hù)python manage.py createsuperuser的時(shí)候,會(huì )在表里面寫(xiě)入管理員的賬號、密碼、郵箱等相關(guān)信息,如下圖
這里我的賬號是root,密碼是root,很顯然存在數據庫的密碼不是明文的,而是加密后的
前面注冊的root賬號是在auth_user表里面,所以需導入對應的User表,這里密碼不是明文的,有個(gè)專(zhuān)門(mén)的方法authenticate判斷是否登錄成功
from django.contrib.auth import authenticate
> python manage.py shell
>>> from django.contrib.auth.models import User
>>> from django.contrib.auth import authenticate
# 輸入正確賬號,密碼,user返回root用戶(hù)對象
>>> user=authenticate(username='root',password='root')
>>> user
<User: root>
# 輸入錯誤的密碼,user返回為空
>>> user=authenticate(username='root',password='xxxx')
>>> user
>>>authenticate認證用戶(hù)的密碼是否有效, 若有效則返回代表該用戶(hù)的user對象, 若無(wú)效則返回None
注冊用戶(hù)可以直接使用create_user方法,非常方便,前面說(shuō)過(guò)密碼是加密后的,這里使用create_user方法新增用戶(hù)會(huì )自動(dòng)加密存儲到數據庫了
> python manage.py shell
>>> from django.contrib.auth.models import User
>>> from django.contrib.auth import authenticate
# 新增用戶(hù)test.密碼test
>>> user1=User.objects.create_user(username='test',password='test',email='283340479@qq.com')
>>> user1.save()
>>>save保存后,數據庫查看auth_user表新增成功
當我們需要修改密碼的時(shí)候,可以用set_password方法,該方法不驗證用戶(hù)的身份,直接修改,一般在已經(jīng)登陸的時(shí)候,修改密碼使用
> python manage.py shell
>>> from django.contrib.auth.models import User
>>> from django.contrib.auth import authenticate
>>> user=authenticate(username='test',password='test')
# 設置新密碼
>>> user.set_password('123456')
>>> user.save()
# 修改成功后使用新密碼登陸
>>> user=authenticate(username='test',password='test')
>>> user.set_password('123456')當密碼錯誤的時(shí)候,user返回為空,使用user.set_password('123456’)會(huì )直接拋異常,所以修改密碼的時(shí)候,一般先判斷下
>>> user=authenticate(username='test',password='test')
# 密碼不對,user為空拋異常
>>> user.set_password('123456')
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'set_password'
# 加判斷
>>> user=authenticate(username='test',password='test')
>>> user
>>> if user is not None:
... user.set_password('123456')
... user.save()
...
>>>用戶(hù)登陸功能,有給專(zhuān)門(mén)的login函數,它可以在session中添加SESSION_KEY
from django.contrib.auth import login
login(request, user)傳2個(gè)參數,request和user參數,這里不需要傳密碼,需配合authenticate(username=username, password=password)先校驗賬號和密碼是否成功
login(request, user)
登陸之前還有個(gè)is_active判斷, is_active是判斷用戶(hù)是否可以用,當它為is_active的時(shí)候(True),用戶(hù)可以正常登陸,當is_active為0(False),用戶(hù)不可用,相當于拉入黑名單
from django.contrib.auth import login, authenticate
def login_view(request):
'''session登陸'''
user = authenticate(username='test', password='test')
if user is not None:
if user.is_active:
login(request, user)logout會(huì )清除request中的user信息, 并刷新session
from django.contrib.auth import logout
def logout_view(request):
'''退出登陸'''
logout(request)2019年《python3接口自動(dòng)化》課程3月17-4月14開(kāi)課
主講老師:上海-悠悠
上課方式:QQ群視頻在線(xiàn)教學(xué)
上課時(shí)間:每周六、周日晚上20:30-22:30
報名費:1000
聯(lián)系客服