溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

django登錄后修改密碼的方法

發(fā)布時間:2020-09-02 10:10:35 來源:億速云 閱讀:178 作者:小新 欄目:編程語言

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è)資訊頻道。

向AI問一下細(xì)節(jié)

免責(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)容。

AI