您好,登錄后才能下訂單哦!
django登錄后修改密碼的方法?這個問題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純?nèi)容,讓我們一起來看看吧!
Django內(nèi)置的應(yīng)用非常多,對于修改用戶密碼,我們可以用自帶的方法去修改,也可以通過自己寫對應(yīng)的方法去修改.這里來分別將兩種方法羅列出來.
一.首先是用django自帶的修改用戶密碼
相關(guān)的源碼被保存在django.contrib.auth的views中.同樣的,django自帶的login和logout函數(shù)也在這里.其中有一個定義的password_change方法和password_change_done方法,一個是我們修改密碼的方法,一個是我們修改完成后處理的方法.
由于django已經(jīng)給我們寫好了,我們不需要在views中再配置,直接定義urls.如下:
from django.contrib.auth import views as auth_views urlpatterns = [ url(r'password-change/$', auth_views.password_change, { 'template_name': "account/password_change_form.html", 'post_change_redirect': '/account/password-change-done'}, name='password_change'), url(r'password-change-done/$', auth_views.password_change_done, { 'template_name': "account/password_change_done.html"}, name='password_change_done'), ]
因為自帶的password_change的模板對應(yīng)于registration/password_change_form.html,我們在settings里已經(jīng)講templates路徑改為自己設(shè)置的路徑,所以這里我們直接將自己寫好的模板通過參數(shù)形式傳入.通過看源碼可只如果我們沒有給定跳轉(zhuǎn)路徑,則會自動跳轉(zhuǎn)到password_change_done,但是我們寫的password_change_done是保存在自己創(chuàng)建的用戶管理app里,路徑前面多了個account,因此,我們需要自己將這個跳轉(zhuǎn)路徑傳入.
同理,password_change_done也是一樣的,只不過它的模板引用名稱為password_change_done.html
二.其次是自己設(shè)置一個用戶修改函數(shù)
剛學(xué)的小白要注意,不能直接從前段表單里獲取密碼的輸入值,然后與數(shù)據(jù)庫中存放的值做比較.因為數(shù)據(jù)庫中的密碼是經(jīng)過算法加密后的哈希值,是密文,無法直接做比較.通過學(xué)習(xí)django官方文檔可以知道,django自帶的有關(guān)密碼的驗證函數(shù).
在django.contrib.auth.hashers模塊提供一組函數(shù)來創(chuàng)建和驗證散列密碼,比較好的是可以獨立于User模型來使用,也就是說我們不必綁定用戶對象,可以直接拿來使用.其中有三個函數(shù),方法及介紹如下:
check_password(password, encoded) 如果要通過將純文本密碼與數(shù)據(jù)庫中的散列密碼進行比較來手動驗證用戶,請使用方便功能 check_password()。它需要兩個參數(shù): 要檢查的純文本密碼,以及數(shù)據(jù)庫中要檢查的用戶 password 字段的完整值,如果它們匹配,則返回 True,否則返回 False。
make_password(password, salt=None, hasher='default') 以此應(yīng)用程序使用的格式創(chuàng)建散列密碼。它需要一個強制參數(shù):明文密碼?;蛘?,如果您不想使用默認(rèn)值(PASSWORD_HASHERS 設(shè)置的 第一個條目),您可以提供鹽和散列算法來使用。有關(guān)每個哈希算法的算法名稱,請參見 包括哈希。如果密碼參數(shù)是 None,則返回 不可用的密碼(check_password() 不會接受的密碼)。
is_password_usable(encoded_password) 檢查給定的字符串是否是具有針對 check_password() 驗證的機會的哈希密碼。
這里我們可以用到check_password,以及make_password,介紹的很清楚了.我將我簡單的代碼放下:
def change_pwd(request): if request.method == 'POST': form = ChangepwdForm(request.POST) if form.is_valid(): user = User.objects.get(username=request.POST.get('username')) if user: if check_password(request.POST.get('password'), user.password): user.password = make_password(request.POST.get('new_password')) user.save() return ... return ... return ... else: return ... form = ChangepwdForm() return render(request, 'account/changepwd.html', {'form': form})
感謝各位的閱讀!看完上述內(nèi)容,你們對django登錄后修改密碼的方法大概了解了嗎?希望文章內(nèi)容對大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。