您好,登錄后才能下訂單哦!
項(xiàng)目需求:用戶注冊頁面注冊之后,系統(tǒng)會(huì)發(fā)送一封郵件到用戶郵箱,用戶點(diǎn)擊鏈接以激活賬戶,其中鏈接中的用戶信息需要加密處理一下
其中激活自己郵箱的smtp服務(wù)的操作就不在加以說明,菜鳥教程上有非常清晰的講解,也可以去網(wǎng)上搜索詳細(xì)步驟
首先在Django項(xiàng)目的settings文件中配置發(fā)送郵件相關(guān)的配置如下:
# 固定寫法 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' # smtp服務(wù)器地址 EMAIL_HOST = 'smtp.qq.com' # 固定端口號(hào) EMAIL_PORT = 25 #發(fā)送郵件的郵箱 EMAIL_HOST_USER = '2746565701@qq.com' #在郵箱中設(shè)置的客戶端授權(quán)密碼 EMAIL_HOST_PASSWORD = 'ytnvwapcbxmcdfig' #收件人看到的發(fā)件人,尖括號(hào)中的必須與上面的user一致 EMAIL_FROM = '天天生鮮<2746565701@qq.com>'
用戶模塊的views.py文件關(guān)于itsdangerous和郵件發(fā)送的代碼如下,項(xiàng)目其它部分的操作代碼這里全部刪除,這里使用的是基于類的視圖:
基本邏輯:
# 導(dǎo)入itsdangerous中要用到的加密類 from itsdangerous import TimedJSONWebSignatureSerializer as Serializer # 導(dǎo)入itsdangerous中超時(shí)的異常 from itsdangerous import SignatureExpired # 導(dǎo)入配置文件 from django.conf import settings # 導(dǎo)入Django中的發(fā)送郵件的方法 from django.core.mail import send_mail from .models import User # Create your views here. class RegisterView(View): """注冊""" .................... def post(self, request): """進(jìn)行注冊處理""" # 發(fā)送激活郵件,包含一個(gè)激活的鏈接:https://127.0.0.1:8000/user/active/3 # 激活鏈接中需要包含用戶的身份信息,并且要把身份信息進(jìn)行加密 # 加密用戶的身份信息,生成激活的token serializer = Serializer(settings.SECRET_KEY, 3600) # 創(chuàng)建愛一個(gè)itsdangerous模塊中加密類的對(duì)象,其中SECRET_KEY用settings中的,第二個(gè)參數(shù)為超時(shí)時(shí)間 info = {'confirm': user.id} # 被加密的信息,一個(gè)字典,字典值為接收郵件用戶的id # 利用dumps方法進(jìn)行加密,加密后為bytes數(shù)據(jù) token = serializer.dumps(info) # bytes數(shù)據(jù) token = token.decode() # bytes轉(zhuǎn)str # 發(fā)郵件 subject = '天天生鮮歡迎信息' # 郵件主題 message = '' 郵件信息,因?yàn)橛衕tml__message了,所以這里為空就好 sender = settings.EMAIL_FROM # 發(fā)送者,直接從配置文件中導(dǎo)入上面配置的發(fā)送者 receiver = [email] # 接收者的郵箱,是一個(gè)列表,這里是前端用戶注冊時(shí)傳過來的 email # html結(jié)構(gòu)的信息,其中包含了加密后的用戶信息token html_message = '<h2>{},歡迎您成為天天生鮮注冊會(huì)員</h2>請點(diǎn)擊下面鏈接激活您的用戶<br><a href="http:127.0.0.1:8000/user/active/{}" rel="external nofollow" >http:127.0.0.1:8000/user/active/{}</a>'.format(username, token, token) # 調(diào)用Django發(fā)送郵件的方法,這里傳了5個(gè)參數(shù) send_mail(subject, message, sender, receiver, html_message=html_message) # 返回應(yīng)答:跳轉(zhuǎn)到首頁 return redirect(reverse('goods:index')) class ActiveView(View): """用戶激活""" def get(self, request, token): """進(jìn)行用戶激活""" # 進(jìn)行解密,獲取要激活的用戶信息 serializer = Serializer(settings.SECRET_KEY, 3600) try: # 通過itsdangerous模塊的loads方法解密 info = serializer.loads(token) # 獲取待激活用戶的id user_id = info.get('confirm') # 根據(jù)id獲取用戶信息 user = User.objects.get(id=user_id) # 激活用戶操作,將數(shù)據(jù)庫中對(duì)應(yīng)用戶的is_active參數(shù)變?yōu)? user.is_active = 1 user.save() # 跳轉(zhuǎn)到登錄界面 return redirect(reverse('user:login')) except SignatureExpired as e: # 激活鏈接已經(jīng)過期 return HttpResponse('激活鏈接已過期!')
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(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)容。