Django利用第三方應用重置密碼

        重置密碼基本上是網站的標配,在這裏同樣介紹2種重置密碼的方法

一.使用第三方應用,django-password-reset

        django有很多優秀好用的第三方應用,其中就有一個是用來重置密碼的,使用了一下發現非常好用,只有49k大小.首先是用pip install  django-password-reset來安裝,我們打開其官方文檔查看用法如下:                       

            首先它是一個應用,需要將其安裝到settings中,然後在urls中引入,用的時候調用即可.我的配置如下:


            在需要重置密碼的時候輸入http://127.0.0.1:8001/pwd_reset/recover/會出現調用畫面.輸入框裏可以輸入用戶名或者郵箱,然後就可以很方便的調用.但是,一個大坑來了,如果這樣設置後,會報錯,如下:


            查看源碼問題後,發現問題出現在這裏:


            在這個第三方應用裏編寫的路徑都是{% url ‘password_reset_reset’ %}之類的,password_reset_reset爲你urls裏各個路徑的名字name,由於我們在首頁路徑里加了前綴pwd_reset,所以應用裏所有的都無法找到準確路徑,自動缺失app_name.

            解決辦法是在你總urls裏去掉前綴pwd_reset,設置爲空,即可解決


二.使用django內置函數來進行密碼重置

            django有內置的login,logout,當然也有reset等方法,查看文檔即源碼,會發現其用法,這裏不做過多講解.

            會用到如下views:

password_reset:用於重置密碼
password_reset_done:用於重置密碼後的顯示
password_reset_confirm:用於更新新密碼
password_reset_complete:用於成功更新密碼

            同登錄內置函數一樣,如果你更改了templates,需要提供模板,以及重定向位置,具體原理見源碼,這裏面password_reset以及password_reset_confirm需要提供重定向post_reset_redirect,剩下的我們自己重寫前段模板即可.需要注意的password_reset不僅需要提供template_name模板,還需要提供email_template_name,發送的郵件頁面,subject_template_name郵件的txt文件.

            在email_template_name中,我們編寫的需要用戶確定的點擊鏈接爲

{{ protocol }}://{{ domain }}{% url 'account:password_reset_confirm' uidb64=uid token=token%}
            protocol爲你的http協議,domain爲你的地址, uidb64=uid token=token爲你的身份鑰匙.只有郵件收件者點擊這個鏈接才能確認這個郵箱身份.

        因此,urls裏password_reset_confirm的url如下:

url(r'password-reset-confirm/(?P<uidb64>[-\w]+)/(?P<token>[-\w]+)/$',.........)

        都設置好後需要在settings裏設置你的郵箱格式,我的如下:

  1. EMAIL_HOST = 'smtp.163.com'
  2. EMAIL_HOST_USER = '[email protected]'
  3. EMAIL_HOST_PASSWORD = '.......'
  4. EMAIL_PORT = 25
  5. EMAIL_USE_TLS = True
  6. DEFAULT_FROM_EMAIL = '[email protected]'
  7. EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
最後一個EMAIL_BACKEND的作用是將郵件直接顯示在控制檯,對於開發來說非常有用,在後期生產環境時,要注意去掉








注意:登錄的時候url中填寫http://10.0.118.86:12350/recover/
轉載:https://blog.csdn.net/guyunzh/article/details/79461594

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章