Django用戶(hù)認(rèn)證: 利用Django Auth模塊實(shí)現(xiàn)用戶(hù)注冊(cè)、登錄與登出
用戶(hù)登錄注冊(cè)屬于用戶(hù)認(rèn)證的一部分,Django內(nèi)置了一套用戶(hù)認(rèn)證體系,使用起來(lái)比較方便,而且支持用戶(hù)定制和拓展,足以滿(mǎn)足任何復(fù)雜的業(yè)務(wù)需求。
1 Django 用戶(hù)管理機(jī)制
Django框架中,用戶(hù)權(quán)限管理被劃分為三個(gè)層次:
- 用戶(hù):系統(tǒng)使用者,擁有自己的權(quán)限??杀灰粋€(gè)或多個(gè)用戶(hù)組包含。
- 用戶(hù)組:對(duì)用戶(hù)進(jìn)行分類(lèi)。同一用戶(hù)組擁有相同的權(quán)限。
- 權(quán)限:用于約束用戶(hù)行為。Django中一個(gè)完整的權(quán)限除權(quán)限本身外,還包括用戶(hù)和對(duì)象,即什么用戶(hù)對(duì)什么對(duì)象具有什么樣的權(quán)限。
2 Auth模塊
Auth模塊是Django框架內(nèi)置的權(quán)限管理模塊。利用Auth模塊可以實(shí)現(xiàn)用戶(hù)身份認(rèn)證、用戶(hù)組和權(quán)限管理。
2.1 配置權(quán)限管理模塊
在項(xiàng)目配置文件settings.py中加入以下代碼:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth', # 權(quán)限管理模塊
'django.contrib.contenttypes', # 內(nèi)容管理模塊
]
2.2 Auth模塊中的用戶(hù)模型 用戶(hù)組模型 用戶(hù)權(quán)限模型
模塊名稱(chēng) | 說(shuō)明 |
---|---|
Django.contrib.auth.models.User | Auth模塊中的用戶(hù)模型 |
Django.contrib.auth.models.Group | Auth模塊中的組模型 |
Django.contrib.auth.models.Permission | Auth模塊中的權(quán)限模型 |
3 Django自帶的用戶(hù)模型(User)介紹
3.1 User模型內(nèi)置字段介紹
用戶(hù)模型是Django用戶(hù)認(rèn)證的核心,用戶(hù)模型內(nèi)置了多個(gè)字段可直接使用。
內(nèi)置字段名稱(chēng) | 說(shuō)明 | 字段類(lèi)型 |
---|---|---|
id | 數(shù)據(jù)庫(kù)主鍵 | int |
password | 密碼 | varchar |
last_login | 最近登錄時(shí)間 | datetime |
is_superuser | 是否超級(jí)管理員 | tinyint |
user_name | 用戶(hù)賬號(hào) | varchar |
郵箱 | varchar | |
is_staff | 是否登錄admin后臺(tái) | tinyint |
is_active | 是否激活 | tinyint |
date_joined | 賬號(hào)創(chuàng)建時(shí)間 | datetime |
3.2 User模型內(nèi)置方法
內(nèi)置方法名稱(chēng) | 說(shuō)明 |
---|---|
authenticate(username, password) | 用于用戶(hù)認(rèn)證。認(rèn)證成功,則返回一個(gè)User對(duì)象 |
login(HttpRequest, user) | 用于用戶(hù)登錄。user參數(shù)是經(jīng)過(guò)認(rèn)證的User對(duì)象。登錄成功后將用戶(hù)身份信息記錄到請(qǐng)求的會(huì)話(huà)對(duì)象中存儲(chǔ)。后臺(tái)使用request.user可獲取當(dāng)前登錄的用戶(hù)對(duì)象。如果未登錄成功,則request.user得到的是一個(gè)匿名用戶(hù)對(duì)象。 |
is_authenticated() | 判斷當(dāng)前用戶(hù)是否經(jīng)過(guò)認(rèn)證 |
logout(request) | 清除當(dāng)前請(qǐng)求,注銷(xiāo)會(huì)話(huà) |
create_user() | 創(chuàng)建新用戶(hù),至少提供用戶(hù)名和密碼 |
set_password(password) | 修改密碼 |
check_password(password) | 檢查密碼是否正確 |
上述內(nèi)置方法,可以在用戶(hù)校驗(yàn)時(shí)為我們提供巨大的方便。
用戶(hù)創(chuàng)建項(xiàng)目和應(yīng)用后,執(zhí)行完數(shù)據(jù)遷移,后臺(tái)會(huì)生成一套auth開(kāi)頭的用戶(hù)權(quán)限數(shù)據(jù)表。
4 基于User模型的功能開(kāi)發(fā)
4.1 用戶(hù)注冊(cè)
在視圖文件views.py中:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-419510.html
# # 導(dǎo)入模塊
from django.shortcuts import render, redirect
from django.http import HttpResponse, JsonResponse
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, logout
def register(request):
if request.method == 'GET':
return render(
request,
'basic/register.html'
)
elif request.method == 'POST':
# 獲取參數(shù)
user_name = request.POST.get('username', '')
pwd = request.POST.get('password', '')
# 用戶(hù)已存在
if User.objects.filter(username=user_name):
return JsonResponse({
'code': 200,
'msg': '用戶(hù)已存在'
})
# 用戶(hù)不存在
else:
# 使用User內(nèi)置方法創(chuàng)建用戶(hù)
user = User.objects.create_user(
username=user_name,
password=pwd,
email='123@qq.com',
is_staff=1,
is_active=1,
is_superuser=0
)
return JsonResponse({
'code': 200,
'msg': '用戶(hù)注冊(cè)成功'
})
else:
return JsonResponse({
'code': 403,
'msg': '被禁止的請(qǐng)求'
})
4.2 用戶(hù)登錄
在視圖文件views.py中:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-419510.html
"""此處導(dǎo)入的模塊和注冊(cè)是一樣的"""
def login(request):
if request.method == 'GET':
return render(
request,
'basic/login.html',
)
elif request.method == 'POST':
# 獲取參數(shù)
user_name = request.POST.get('username', '')
pwd = request.POST.get('password', '')
# 用戶(hù)已存在
if User.objects.filter(username=user_name):
# 使用內(nèi)置方法驗(yàn)證
user = authenticate(username=user_name, password=pwd)
# 驗(yàn)證通過(guò)
if user:
# 用戶(hù)已激活
if user.is_active:
return JsonResponse({
'code': 200,
'msg': '登錄成功'
})
# 未激活
else:
return JsonResponse({
'code': 200,
'msg': '用戶(hù)未激活'
})
# 驗(yàn)證失敗
else:
return JsonResponse({
'code': 403,
'msg': '用戶(hù)認(rèn)證失敗'
})
# 用戶(hù)不存在
else:
return redirect('/basic/register')
4.3 用戶(hù)登出
"""此處導(dǎo)入的模塊和注冊(cè)是一樣的"""
def logout(request):
logout(request)
return redirect('/basuc/login')
到了這里,關(guān)于Django用戶(hù)認(rèn)證: 利用Django Auth模塊實(shí)現(xiàn)用戶(hù)注冊(cè)、登錄與登出的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!