摘要:本章講如何幫助健忘癥患者,重置用戶密碼。實際上不僅內置了密碼重置,還包括登錄登出密碼修改等功能。總結本章學習了使用第三方庫,高效完成了重置密碼的功能。有疑問請在杜賽的個人網站留言,我會盡快回復。
隨著技術的發展,驗證用戶身份的手段越來越多,指紋、面容、聲紋應有盡有,但密碼依然是最重要的手段。
互聯網處處都有密碼的身影,甚至變成了現代人的一種負擔。像筆者這樣的,動輒幾十個賬號密碼,忘記其中幾個簡直太正常了。
本章講如何幫助健忘癥患者,重置用戶密碼。
安裝第三方庫前面我們已經知道如何修改文章標題、正文等內容,但是密碼作為驗證身份的重要口令,必須以更加穩妥的方式修改。一種比較常用的方式是發送一封修改密碼的郵件到用戶事先綁定的郵箱里。
業務流程分析如下:
向用戶郵箱發送包含重置密碼地址的郵件。郵件的地址需要動態生成,防止不懷好意的用戶從中搗亂;
向網站用戶展示一條發送郵件成功的信息;
用戶點擊郵箱中的地址后,轉入重置密碼的頁面;
向用戶展示一條重置成功的信息。
上面4個步驟包含了4個視圖和模板,自己寫代碼看來有些繁瑣。
可能你會想,Django這種以開發效率著稱的框架,重置密碼這種常用功能是不是內置了呢?答案是肯定的。事實上內置模塊的流程和上面的是完全相同的,你只需要將上面4個步驟的url配置好就可以使用了。當然內置的模板很簡陋,你可以覆寫模板變成自己網站的風格。
實際上Django不僅內置了密碼重置,還包括登錄、登出、密碼修改等功能。建議讀者到一定水平后多閱讀Django的源碼,學習其中的編程技巧。另外這部分內容Django是用類視圖寫的,現在閱讀可能有一定困難。源碼位置:/env/Lib/site-packages/django/contrib/auth/views.py
官方文檔:Django 的驗證系統
使用內置的模塊似乎要簡單多了,那還能不能更簡單呢?確實是可以的。
Django作為優秀的Web框架,有很多優秀的第三方庫(即APP)被世界各地的程序員們打包發布在網上,免費供你使用。成功從來都是站在巨人的肩膀上的,既然已經有了“輪子”,何必要自己再造一個呢。
我們這里就可以用到一個叫Django-password-reset的第三方庫。
打開虛擬環境,輸入指令pip install -U django-password-reset:
(env) E:django_projectmy_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 ... ...
郵件不能憑空產生,目前為止我們并沒有配置發件郵箱的賬號密碼,也沒有配置發送郵件的端口、發件人等信息。
因此還需要在/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 = "杜賽的個人網站"
簡單郵件傳輸協議 (Simple Mail Transfer Protocol, SMTP) 是在Internet傳輸Email的協議標準。SMTP是基于文本的協議。在其之上指定了一條消息的一個或多個接收者,然后消息文本會被傳輸。SMTP使用TCP端口25。
SMTP是一個“推”的協議(發送郵件),它不允許從遠程服務器上“拉”來消息(接收郵件)。要接收郵件,客戶端必須使用POP3或IMAP。
設置好后就可以開啟服務器測試了。
點擊登錄頁面:
點擊最后一行的鏈接“這里”:
按照要求輸入用戶名或者Email,點擊確認按鈕:
提示已經把重置密碼的鏈接發到郵箱中了。
前往Email中查看新郵件:
居然神奇的收到了郵件!繼續點擊郵件中的鏈接:
按照提示輸入新密碼后:
密碼重置就成功了。
嘗試一下新密碼登錄是沒問題的,順利完成了任務。
篇幅關系就沒有去挨個覆寫原有的模板文件了。如果有興趣可以仔細閱讀官方文檔,嘗試去改寫模板文件,讓頁面更加匹配自己網站的風格。
官方文檔在這里:docs
GitHub:django-password-reset
相信讀者也嘗到使用三方庫的甜頭了:只需要寫很少的代碼,就可以完成大量的功能。筆者是推薦在開發中多使用優秀的三方庫的,可以極大的提高效率,減少重復勞動。當然使用三方庫也有一些缺點,比如會因為一知半解而維護困難、不能量身定制等。在實踐中到底用還是不用,就根據實際情況再做權衡了。
后面陸續還會介紹更多的三方庫,還是貫徹那句話:成功是站在巨人肩膀上的。
常見錯誤發送郵件因為涉及到了發送郵箱的相關設置和權限,所以容易出各種各樣奇怪的問題。
好比說你的發送郵箱設置是xxx@sina.com。項目代碼都是對的,但是新浪禁止了smtp服務,那郵件也會發送不成功。如果報錯請嘗試以下方法:
設置發送郵箱為允許smtp服務
檢查賬號、密碼是否正確
有的發送端口需要額外的設置,嘗試更換端口
更換其他服務商的郵箱
如果還不行,就請根據報錯頁面,搜索一下類似問題的解決方案了。
總結本章學習了使用第三方庫django-password-reset,高效完成了重置密碼的功能。
下一章學習擴展并更新用戶資料。
有疑問請在杜賽的個人網站留言,我會盡快回復。
或Email私信我:dusaiphoto@foxmail.com
項目完整代碼:Django_blog_tutorial
轉載請告知作者并注明出處。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44941.html
摘要:比較流行的解決方案是允許用戶通過第三方登錄,即可以通過微博這類知名社區的授權,從而登錄你的小站,免去了注冊的麻煩。微博微信的登錄方式大致都遵循這個流程本章雖然加載了微博的接口,但是限于篇幅并沒有配置,請讀者查閱官方文檔去實現。 現在我們已經擁有一個可以進行用戶本地登錄的博客系統了。如果有人欣賞你的文章,說不定就會注冊成為本地用戶,并和你好好交流一番。 但頭疼的是,用戶可能每天都在互聯網...
摘要:聲明本博客的注冊登錄退出功能將使用,參考資源如下文檔教程安裝配置信息安裝后設置,將相關加入到里去。指定與特定配置文件相關聯的對象之數據庫的。因此并沒有提供用戶詳情應用用戶詳情請參考個人博客五用戶個人資料擴展 聲明:本博客的注冊登錄退出功能將使用django-allauth,參考資源如下:django-allauth文檔django-allauth教程 1、安裝django-allau...
摘要:聲明本博客的注冊登錄退出功能將使用,參考資源如下文檔教程安裝配置信息安裝后設置,將相關加入到里去。指定與特定配置文件相關聯的對象之數據庫的。因此并沒有提供用戶詳情應用用戶詳情請參考個人博客五用戶個人資料擴展 聲明:本博客的注冊登錄退出功能將使用django-allauth,參考資源如下:django-allauth文檔django-allauth教程 1、安裝django-allau...
摘要:既然有登錄登出,那么用戶的注冊肯定也是少不了的。用戶在注冊成功后會自動登錄并返回博客列表頁面。總結本章用到了表單類對數據進行驗證清洗等知識,完成了用戶的注冊功能。 既然有登錄登出,那么用戶的注冊肯定也是少不了的。 注冊表單類 用戶注冊時會用到表單來提交賬號、密碼等數據,所以需要寫注冊用的表單/userprofile/forms.py: /userprofile/forms.py .....
閱讀 2071·2021-10-12 10:12
閱讀 791·2021-09-24 09:47
閱讀 1191·2021-08-19 11:12
閱讀 3468·2019-08-29 13:06
閱讀 689·2019-08-26 11:43
閱讀 2570·2019-08-23 17:20
閱讀 1152·2019-08-23 16:52
閱讀 2601·2019-08-23 14:27