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