django驗(yàn)證系統(tǒng)的具體使用
user對(duì)象
用戶對(duì)象是認(rèn)證系統(tǒng)的核心。django的認(rèn)證框架中的用戶只有一個(gè)類
默認(rèn)用戶的主要屬性
- username
- password
- first_name
- last_name
創(chuàng)建用戶
創(chuàng)建用戶最直接的方法是使用包含create_user()的函數(shù)
from django.contrib.auth.models import User user=User.objects.create_user("username","email","password")
創(chuàng)建超級(jí)用戶
通過(guò)命令行方式創(chuàng)建超級(jí)用戶
python manage.py createsuperuser
更改密碼
第一種:通過(guò)命令行方式
python manage.py changepassword (你的用戶名,如果沒(méi)有輸入,默認(rèn)當(dāng)前的用戶)
第二種:通過(guò)數(shù)據(jù)模型開修改
from django.contrib.auth.models importf User user=User.objects.get(username=(需要修改的用戶名)) user.set_password("new password") user.save()
驗(yàn)證用戶
authenticate(request,username,password)
使用authenticate(request)來(lái)驗(yàn)證用戶。它使用username和password作為參數(shù)來(lái)驗(yàn)證,對(duì)每個(gè)身份驗(yàn)證后端進(jìn)行檢查。如果后端驗(yàn)證有效,則返回一個(gè)User對(duì)象,如果沒(méi)有,將返回None
web請(qǐng)求認(rèn)證
django使用sessions和中間件將身份驗(yàn)證系統(tǒng)掛接到請(qǐng)求對(duì)象中
它們?cè)诿看握?qǐng)求都會(huì)提供request.user屬性。如果當(dāng)前沒(méi)有用戶登錄。這個(gè)屬性將會(huì)設(shè)置為AnonymousUser,否則將會(huì)被設(shè)置為user實(shí)例
你可以使用is_authenticatded區(qū)分兩者
只讀屬性,始終返回 True (匿名用戶 AnonymousUser.is_authenticated 始終返回 False )。這是一種判斷用戶是否已通過(guò)身份認(rèn)證的方法。這并不意味著任何權(quán)限,也不會(huì)檢查用戶是否處于活動(dòng)狀態(tài)或是否具有有效會(huì)話。即使通常你會(huì)根據(jù) request.user 檢查這個(gè)屬性,以確定它是否被 AuthenticationMiddleware 填充(表示當(dāng)前登錄的用戶),但是你應(yīng)該知道該屬性對(duì)于任何 User 實(shí)例都返回 True。
if request.user.is_authenticated: pass else: pass
用戶如何登陸
如果有已驗(yàn)證的用戶想添加到session中,將通過(guò)login()函數(shù)完成
login(request,user,)要在視圖中讓用戶登錄,使用 login() 。它需要 HttpRequest 對(duì)象和 User 對(duì)象。通過(guò) Django 的 session 框架, login() 會(huì)在 session 中保存用戶的ID。
from django.contrib.auth import authenticate,login def fun(request): username=request.POST("username") password=request.POST("password") user=authenticate(request,username=username,password=password) if user is not None: login(request,user) else: pass
用戶如何登出
logout(request)
如果已經(jīng)通過(guò)django.contrib.auth.login()登錄的用戶想要登出,可以使用logout()方法,需要傳入request
from django.contrib.auth import logout def logout_view(request): logout(request)
限制對(duì)未登錄用戶的訪問(wèn)
原始方式
限制訪問(wèn)頁(yè)面最原始的辦法就是檢查,request.user.is_authenticated并重定向到登錄頁(yè)面
from django.conf import settings from django.shortcuts import redirect def my_view(request): if not request.user.is_authenticated: return redirect()
login_required裝飾器
作為快捷方式,你可以使用login_required()裝飾器
from django.contrib.auth.decorators import login_required @login_required def my_view(request): ...
login_required()會(huì)執(zhí)行以下操作:
- 如果用戶沒(méi)有登錄,會(huì)重定向到settings.LOGIN_URL,并傳遞絕對(duì)路徑到查詢字符串中,例如: /accounts/login/?next=/polls/3/ 。
- 如果用戶已經(jīng)登錄,則正常執(zhí)行視圖
- login_required()也有可選參數(shù)login_url用來(lái)指定重定向的路由
- 默認(rèn)情況下,成功驗(yàn)證時(shí)用戶跳轉(zhuǎn)的路徑保存在名為 "next" 的查詢字符串參數(shù)中。如果你希望這個(gè)參數(shù)使用不同名稱,請(qǐng)?jiān)?login_required() 中傳遞可選參數(shù) redirect_field_name :
LoginRequired Mixin
使用基于類的視圖時(shí),可以使用LoginRequiredMixin實(shí)現(xiàn)和login_required相同的行為。這個(gè)Mixin應(yīng)該在繼承列表最左邊的位置
from django.contrib.auth.mixins import LoginRequiredMixin class MyView(LoginRequiredMixin,View): login_url="/login/" redirect_field_name="xxx"
到此這篇關(guān)于django驗(yàn)證系統(tǒng)的具體使用的文章就介紹到這了,更多相關(guān)django 驗(yàn)證系統(tǒng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Django?CSRF驗(yàn)證失敗請(qǐng)求被中斷的問(wèn)題
- Python基于Django實(shí)現(xiàn)驗(yàn)證碼登錄功能
- Django中session登錄驗(yàn)證操作指南
- django中只使用ModleForm的表單驗(yàn)證
- Django基于Token的驗(yàn)證使用的實(shí)現(xiàn)
- Django中的JWT身份驗(yàn)證的實(shí)現(xiàn)
- Django中使用pillow實(shí)現(xiàn)登錄驗(yàn)證碼功能(帶刷新驗(yàn)證碼功能)
- django注冊(cè)用郵箱發(fā)送驗(yàn)證碼的實(shí)現(xiàn)
- Django ModelSerializer實(shí)現(xiàn)自定義驗(yàn)證的使用示例
相關(guān)文章
python實(shí)現(xiàn)list元素按關(guān)鍵字相加減的方法示例
這篇文章主要介紹了python實(shí)現(xiàn)list元素按關(guān)鍵字相加減的方法,結(jié)合具體實(shí)例形式分析了Python針對(duì)list元素遍歷與運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2017-06-06python+matplotlib繪制餅圖散點(diǎn)圖實(shí)例代碼
這篇文章主要介紹了python+matplotlib繪制餅圖散點(diǎn)圖實(shí)例代碼,本實(shí)例是官網(wǎng)的一個(gè)實(shí)例,不過(guò)也很簡(jiǎn)單,大家可以參考下2018-01-01python3+dlib實(shí)現(xiàn)人臉識(shí)別和情緒分析
本文通過(guò)具體代碼不步驟給大家詳細(xì)講述了python3+dlib實(shí)現(xiàn)人臉識(shí)別以及情緒分析的方法,有需要的朋友參考下。2018-04-04python實(shí)現(xiàn)登錄與注冊(cè)系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)登錄與注冊(cè)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11python?Ajenti控制面板輕松地管理所有服務(wù)器網(wǎng)站
Ajenti是一個(gè)值得擁有的管理面板,免費(fèi)開源的管理面板工具,可以幫助你集中管理多個(gè)服務(wù)器和網(wǎng)站,Ajenti?支持?Linux、BSD、Mac?OS?X和Windows?等多個(gè)操作系統(tǒng),并且可以通過(guò)一個(gè)直觀的?Web?界面來(lái)完成各種系統(tǒng)管理任務(wù)2024-01-01Python之ThreadPoolExecutor線程池問(wèn)題
這篇文章主要介紹了Python之ThreadPoolExecutor線程池問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03使用python實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲
這篇文章主要為大家詳細(xì)介紹了使用python實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03