Django搭建我的博客:重置用戶密碼

隨着技術的發展,驗證用戶身份的手段愈來愈多,指紋、面容、聲紋應有盡有,但密碼依然是最重要的手段。html

互聯網到處都有密碼的身影,甚至變成了現代人的一種負擔。像筆者這樣的,動輒幾十個帳號密碼,忘記其中幾個簡直太正常了。python

本章講如何幫助健忘症患者,重置用戶密碼。git

安裝第三方庫

前面咱們已經知道如何修改文章標題、正文等內容,可是密碼做爲驗證身份的重要口令,必須以更加穩妥的方式修改。一種比較經常使用的方式是發送一封修改密碼的郵件到用戶事先綁定的郵箱裏程序員

業務流程分析以下:github

  • 向用戶郵箱發送包含重置密碼地址的郵件。郵件的地址須要動態生成,防止不懷好意的用戶從中搗亂;
  • 向網站用戶展現一條發送郵件成功的信息;
  • 用戶點擊郵箱中的地址後,轉入重置密碼的頁面;
  • 向用戶展現一條重置成功的信息。

上面4個步驟包含了4個視圖和模板,本身寫代碼看來有些繁瑣。django

可能你會想,Django這種以開發效率著稱的框架,重置密碼這種經常使用功能是否是內置了呢?答案是確定的。事實上內置模塊的流程和上面的是徹底相同的,你只須要將上面4個步驟的url配置好就可使用了。固然內置的模板很簡陋,你能夠覆寫模板變成本身網站的風格。編程

實際上Django不只內置了密碼重置,還包括登陸、登出、密碼修改等功能。建議讀者到必定水平後多閱讀Django的源碼,學習其中的編程技巧。另外這部份內容Django是用類視圖寫的,如今閱讀可能有必定困難。bash

源碼位置:/env/Lib/site-packages/django/contrib/auth/views.py服務器

官方文檔:Django 的驗證系統app

使用內置的模塊彷佛要簡單多了,那還能不能更簡單呢?確實是能夠的。

Django做爲優秀的Web框架,有不少優秀的第三方庫(即APP)被世界各地的程序員們打包發佈在網上,免費供你使用。成功歷來都是站在巨人的肩膀上的,既然已經有了「輪子」,何須要本身再造一個呢。

咱們這裏就能夠用到一個叫Django-password-reset的第三方庫。

打開虛擬環境,輸入指令pip install -U django-password-reset

(env) E:\django_project\my_blog>pip install -U django-password-reset

Collecting django-password-reset
...
Installing collected packages: django-password-reset
Successfully installed django-password-reset-2.0
複製代碼

看到以上信息說明安裝成功了。

快速使用

既然第三方庫也是app,那確定須要在/my_blog/settings.py中註冊了:

/my_blog/settings.py

...
INSTALLED_APPS = [
    ...
    
    'password_reset',    # 新增

    'article',
    'userprofile',
]
...
複製代碼

在根路由/my_blog/urls.py中添加app的地址:

/my_blog/urls.py

...
urlpatterns = [
    ...
    path('password-reset/', include('password_reset.urls')),
]
複製代碼

修改/templates/userprofile/login.html,提供一個重置密碼的入口:

/templates/userprofile/login.html

...
<div class="col-12">
    ...
    <form method="post" action=".">
        ...
    </form>
    
    <!-- 新增 -->
    <br>
    <h5>忘記密碼了?</h5>
    <h5>點擊<a href='{% url "password_reset_recover" %}'>這裏</a>重置密碼</h5>
</div>
...
複製代碼

郵件不能憑空產生,目前爲止咱們並無配置發件郵箱的帳號密碼,也沒有配置發送郵件的端口、發件人等信息。

所以還須要在/my_blog/settings.py末尾添加發送郵箱的相關配置:

/my_blog/settings.py

...

# SMTP服務器,改成你的郵箱的smtp
EMAIL_HOST = 'smtp.qq.com'
# 郵箱名
EMAIL_HOST_USER = 'dusaiphoto@foxmail.com'
# 郵箱密碼
EMAIL_HOST_PASSWORD = '你的郵箱密碼'
# 發送郵件的端口
EMAIL_PORT = 25
# 是否使用 TLS
EMAIL_USE_TLS = True
# 默認的發件人
DEFAULT_FROM_EMAIL = '杜賽的我的網站 <dusaiphoto@foxmail.com>'
複製代碼

簡單郵件傳輸協議 (Simple Mail Transfer Protocol, SMTP) 是在Internet傳輸Email的協議標準。

SMTP是基於文本的協議。在其之上指定了一條消息的一個或多個接收者,而後消息文本會被傳輸。SMTP使用TCP端口25。

SMTP是一個「推」的協議(發送郵件),它不容許從遠程服務器上「拉」來消息(接收郵件)。要接收郵件,客戶端必須使用POP3IMAP

設置好後就能夠開啓服務器測試了。

點擊登陸頁面:

點擊最後一行的連接「這裏」:

按照要求輸入用戶名或者Email,點擊確認按鈕:

提示已經把重置密碼的連接發到郵箱中了。

前往Email中查看新郵件:

竟然神奇的收到了郵件!繼續點擊郵件中的連接:

按照提示輸入新密碼後:

密碼重置就成功了。

嘗試一下新密碼登陸是沒問題的,順利完成了任務。

篇幅關係就沒有去挨個覆寫原有的模板文件了。若是有興趣能夠仔細閱讀官方文檔,嘗試去改寫模板文件,讓頁面更加匹配本身網站的風格。

官方文檔在這裏:docs

GitHub:django-password-reset

相信讀者也嚐到使用三方庫的甜頭了:**只須要寫不多的代碼,就能夠完成大量的功能。**筆者是推薦在開發中多使用優秀的三方庫的,能夠極大的提升效率,減小重複勞動。固然使用三方庫也有一些缺點,好比會由於只知其一;不知其二而維護困難、不能量身定製等。在實踐中到底用仍是不用,就根據實際狀況再作權衡了。

後面陸續還會介紹更多的三方庫,仍是貫徹那句話:成功是站在巨人肩膀上的。

常見錯誤

發送郵件由於涉及到了發送郵箱的相關設置和權限,因此容易出各類各樣奇怪的問題。

比如說你的發送郵箱設置是xxx@sina.com。項目代碼都是對的,可是新浪禁止了smtp服務,那郵件也會發送不成功。若是報錯請嘗試如下方法:

  • 設置發送郵箱爲容許smtp服務
  • 檢查帳號、密碼是否正確
  • 有的發送端口須要額外的設置,嘗試更換端口
  • 更換其餘服務商的郵箱

若是還不行,就請根據報錯頁面,搜索一下相似問題的解決方案了。

總結

本章學習了使用第三方庫django-password-reset,高效完成了重置密碼的功能。

下一章學習擴展並更新用戶資料。

轉載請告知做者並註明出處。

相關文章
相關標籤/搜索