您好,登錄后才能下訂單哦!
在各大網(wǎng)站上,一定都遇到過找回密碼的問題,通常采用的方式是通過發(fā)送帶有驗(yàn)證碼的郵件進(jìn)行身份驗(yàn)證,本文將介紹通過Django實(shí)現(xiàn)郵件找回密碼功能。
找回密碼流程
功能流程:
1.首先在用戶登錄界面,添加“忘記密碼”鏈接
2.生成隨機(jī)驗(yàn)證碼,發(fā)送郵件到用戶信息中填寫郵箱
3.在重置密碼頁面,驗(yàn)證填寫驗(yàn)證碼是否需匹配
4.重置密碼成功,重新進(jìn)入到登錄頁面
技術(shù)點(diǎn):
1.發(fā)送郵件使用Django內(nèi)置的django.core.mail
實(shí)現(xiàn)
2.重置密碼頁面驗(yàn)證驗(yàn)證碼填寫是否匹配,提前將發(fā)送的驗(yàn)證碼進(jìn)行緩存,再進(jìn)行匹配
發(fā)送郵件配置
在setting.py中,添加郵箱配置:
EMAIL_USE_SSL = True EMAIL_HOST = 'smtp.163.com' EMAIL_PORT = 465 EMAIL_HOST_USER = 'xxx@163.com' # 帳號 EMAIL_HOST_PASSWORD = 'xxx' # 密碼 DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
其中EMAIL_HOST根據(jù)郵箱進(jìn)行設(shè)置,如果為QQ郵箱,即“smtp.qq.com”。
另外在郵箱中有兩處配置:
1.開啟POP3/SMTP服務(wù)(設(shè)置->POP3/SMTP/IMAP)
2.配置中的密碼并不是郵箱的登錄密碼,填寫的是授權(quán)碼
發(fā)送郵件實(shí)現(xiàn)
在應(yīng)用(user)下的views.py中,進(jìn)行驗(yàn)證碼的生成與發(fā)送郵件操作。這里關(guān)于基礎(chǔ)項(xiàng)目搭建、路由配置不再進(jìn)行贅述。
生成隨機(jī)驗(yàn)證碼方法:
#隨機(jī)生成驗(yàn)證碼 def random_str(randomlength=8): str = '' chars = 'abcdefghijklmnopqrstuvwsyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' length = len(chars) - 1 random = Random() for i in range(randomlength): str += chars[random.randint(0, length)] return str
發(fā)送郵件方法:
#發(fā)送郵件找回密碼 def findpwdView(request): if request.method=="GET": email_title = "找回密碼" code=random_str()#隨機(jī)生成的驗(yàn)證碼 request.session["code"]=code #將驗(yàn)證碼保存到session email_body = "驗(yàn)證碼為:{0}".format(code) send_status = send_mail(email_title, email_body,"xxxx@163.com",["xxxx@qq.com",]) msg="驗(yàn)證碼已發(fā)送,請查收郵件" else: username=request.POST.get("username") password=request.POST.get("password") user=User.objects.get(username=username) code=request.POST.get("code") #獲取傳遞過來的驗(yàn)證碼 if code==request.session["code"]: user.set_password(password) user.save() del request.session["code"] #刪除session msg="密碼已重置" return render(request,"findpwd.html",locals())
總結(jié)
以上所述是小編給大家介紹的Django實(shí)現(xiàn)發(fā)送郵件找回密碼功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對億速云網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。