今天就跟大家聊聊有關(guān)Django組件中Auth模塊是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
為修文等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及修文網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)、修文網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
一、auth模塊介紹
Auth模塊是Django自帶的用戶認(rèn)證模塊:
我們在開發(fā)一個網(wǎng)站的時候,無可避免的需要設(shè)計實(shí)現(xiàn)網(wǎng)站的用戶系統(tǒng)。此時我們需要實(shí)現(xiàn)包括用戶注冊、用戶登錄、用戶認(rèn)證、注銷、修改密碼等功能,這還真是個麻煩的事情呢。
Django作為一個完美主義者的終極框架,當(dāng)然也會想到用戶的這些痛點(diǎn)。它內(nèi)置了強(qiáng)大的用戶認(rèn)證系統(tǒng)--auth,它默認(rèn)使用 auth_user 表來存儲用戶數(shù)據(jù)。
二、auth模塊常用方法
from django.contrib import auth
## create_superuser()
auth 提供的一個創(chuàng)建新的超級用戶的方法,需要提供必要參數(shù)(username、password)等。
用法:
from django.contrib.auth.models import User user = User.objects.create_superuser(username='用戶名',password='密碼',email='郵箱',...)
還可以在菜單欄tool中Run manage.py Task下進(jìn)行命令行創(chuàng)建超級用戶:createsuperuser然后根據(jù)提示創(chuàng)建即可
## create_user()
auth 提供的一個創(chuàng)建新用戶的方法,需要提供必要參數(shù)(username、password)等,該方法和創(chuàng)建超級用戶一樣,只不過用戶權(quán)限會有差別
用法:
from django.contrib.auth.models import User user = User.objects.create_user(username='用戶名',password='密碼',email='郵箱',...)
tip:Run manage.py Task下無法創(chuàng)建普通用戶
## authenticate()
提供了用戶認(rèn)證功能,即驗(yàn)證用戶名以及密碼是否正確,一般需要username 、password兩個關(guān)鍵字參數(shù)。
如果認(rèn)證成功(用戶名和密碼正確有效),便會返回一個 User 對象。
authenticate()會在該 User 對象上設(shè)置一個屬性來標(biāo)識后端已經(jīng)認(rèn)證了該用戶,且該信息在后續(xù)的登錄過程中是需要的。
用法:
user = authenticate(username='usernamer',password='password') # 用戶名和密碼都要傳才行
## login(HttpRequest, user)
該函數(shù)接受一個HttpResponse對象,以及一個經(jīng)過認(rèn)證的User對象。
該函數(shù)實(shí)現(xiàn)一個用戶登錄的功能,本質(zhì)上會在后端為該用戶生成相關(guān)的session數(shù)據(jù)。
用法:
urls.py url(r'^login/', views.my_login), views.py from django.contrib.auth import authenticate,login def my_login(request): if request.method == 'POST': # 獲取前端賬號密碼 username = request.POST['username'] password = request.POST['password'] # 用戶認(rèn)證 user = authenticate(username=username, password=password) # 用戶認(rèn)證成功 if user: # 實(shí)現(xiàn)用戶登錄功能,為該用戶創(chuàng)建生成session數(shù)據(jù) login(request, user) # 這里只要執(zhí)行了login(request, user),在后端任何地方都可以通過request.user 拿到當(dāng)前登錄的用戶對象 return render(request, 'index.html') # 認(rèn)證不成功,說明用戶名密碼錯誤 else: return HttpResponse('用戶名或密碼錯誤,登錄失敗') return render(request, 'login.html') login.htmlindex.html登錄
## logout(request)
該函數(shù)接受一個HttpRequest對象,無返回值。
當(dāng)調(diào)用該函數(shù)時,當(dāng)前請求的session信息會全部清除。該用戶即使沒有登錄,使用該函數(shù)也不會報錯。
用法:
from django.contrib.auth import logout def my_logout(request): logout(request) return redirect('/home/') def my_home(request): return render(request, 'home.html')
## is_authenticated()
用來判斷當(dāng)前請求是否通過了認(rèn)證。返回一個布爾值。
用法:
def my_view(request): if not request.user.is_authenticated(): return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
## login_requierd()
auth 給我們提供的一個裝飾器工具,用來快捷的給某個視圖添加登錄校驗(yàn)。
用法:
from django.contrib.auth.decorators import login_required @login_required def my_view(request): ...
若用戶沒有登錄,則會跳轉(zhuǎn)到django默認(rèn)的 登錄URL '/accounts/login/ ' 并傳遞當(dāng)前訪問url的絕對路徑 (登陸成功后,會重定向到該路徑)。
如果需要自定義登錄的URL,則需要在settings.py文件中通過LOGIN_URL進(jìn)行修改。
示例:
# 局部配置 # @login_required(login_url='/auth_login/') # 全局配置 # auth自動跳轉(zhuǎn) LOGIN_URL = '/auth_login/' # settings.py配置
實(shí)例:
# 導(dǎo)入用戶認(rèn)證模塊和login函數(shù) from django.contrib.auth import authenticate,login def my_login(request): if request.method == 'POST': # 獲取前端賬號密碼 username = request.POST['username'] password = request.POST['password'] next_url = request.GET.get('next') # 獲取到跳轉(zhuǎn)過來的原頁面的url # 用戶認(rèn)證 user = authenticate(username=username, password=password) # 用戶認(rèn)證成功 if user: # 實(shí)現(xiàn)用戶登錄功能,為該用戶創(chuàng)建生成session數(shù)據(jù) login(request, user) return redirect(next_url) # 登錄成功自動跳轉(zhuǎn)到原來的頁面 # 認(rèn)證不成功,說明用戶名密碼錯誤 else: return HttpResponse('用戶名或密碼錯誤,登錄失敗') return render(request, 'login.html') from django.contrib.auth.decorators import login_required # Django登錄驗(yàn)證裝飾器在跳轉(zhuǎn)到登陸頁面時候會自動在頁面末尾拼接一個?next=當(dāng)前url @login_required def my_home(request): return render(request, 'home.html')
## check_password(password)
auth 提供的一個檢查密碼是否正確的方法,需要提供當(dāng)前請求用戶的密碼。
密碼正確返回True,否則返回False。
用法:
ok = user.check_password('密碼')
## set_password(password)
auth 提供的一個修改密碼的方法,接收要設(shè)置的新密碼作為參數(shù)。
注意:設(shè)置完一定要調(diào)用用戶對象的save方法?。。?/p>
用法:
user.set_password(password='') user.save(
修改密碼示例:
@login_required def set_password(request): user = request.user err_msg = '' if request.method == 'POST': old_password = request.POST.get('old_password', '') new_password = request.POST.get('new_password', '') repeat_password = request.POST.get('repeat_password', '') # 檢查舊密碼是否正確 if user.check_password(old_password): if not new_password: err_msg = '新密碼不能為空' elif new_password != repeat_password: err_msg = '兩次密碼不一致' else: user.set_password(new_password) user.save() return redirect("/login/") else: err_msg = '原密碼輸入錯誤' content = { 'err_msg': err_msg, } return render(request, 'set_password.html', content)
## User對象的屬性
User對象屬性:username, password
is_staff : 用戶是否擁有網(wǎng)站的管理權(quán)限.
is_active : 是否允許用戶登錄, 設(shè)置為 False,可以在不刪除用戶的前提下禁止用戶登錄。
看完上述內(nèi)容,你們對Django組件中Auth模塊是什么有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。