亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Django發送郵件和itsdangerous模塊的配合使用解析

發布時間:2020-09-18 00:12:30 來源:腳本之家 閱讀:137 作者:springionic 欄目:開發技術

項目需求:用戶注冊頁面注冊之后,系統會發送一封郵件到用戶郵箱,用戶點擊鏈接以激活賬戶,其中鏈接中的用戶信息需要加密處理一下

其中激活自己郵箱的smtp服務的操作就不在加以說明,菜鳥教程上有非常清晰的講解,也可以去網上搜索詳細步驟

首先在Django項目的settings文件中配置發送郵件相關的配置如下:

# 固定寫法
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# smtp服務器地址
EMAIL_HOST = 'smtp.qq.com'
# 固定端口號
EMAIL_PORT = 25
#發送郵件的郵箱
EMAIL_HOST_USER = '2746565701@qq.com'
#在郵箱中設置的客戶端授權密碼
EMAIL_HOST_PASSWORD = 'ytnvwapcbxmcdfig'
#收件人看到的發件人,尖括號中的必須與上面的user一致
EMAIL_FROM = '天天生鮮<2746565701@qq.com>'

用戶模塊的views.py文件關于itsdangerous和郵件發送的代碼如下,項目其它部分的操作代碼這里全部刪除,這里使用的是基于類的視圖:

基本邏輯:

  • 利用itsdangerous模塊對鏈接中的用戶信息加密,生成加密后的用戶信息token;
  • 調用Django發送郵件的相關方法,進行發送郵件(郵件的配置已經配置好);
  • 郵件發送的鏈接中有一個可變參數,包含著用戶id加密后的信息;
  • 用戶接收到郵件之后,點擊鏈接,跳轉到對應的視圖類進行處理;
  • 負責激活的視圖類,解密用戶的信息,獲取用戶id,查詢到對應用戶(在這個過程會判斷被加密的信息是否超時);
  • 將對應用戶中數據庫中用戶表中 is_active 字段的值改為1,表示此用戶被激活;
  • 跳轉到首頁;
# 導入itsdangerous中要用到的加密類
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
# 導入itsdangerous中超時的異常
from itsdangerous import SignatureExpired
# 導入配置文件
from django.conf import settings
# 導入Django中的發送郵件的方法
from django.core.mail import send_mail
from .models import User



# Create your views here.
class RegisterView(View):
  """注冊"""
  ....................
   
  def post(self, request):
    """進行注冊處理"""  

    # 發送激活郵件,包含一個激活的鏈接:https://127.0.0.1:8000/user/active/3
    # 激活鏈接中需要包含用戶的身份信息,并且要把身份信息進行加密

    # 加密用戶的身份信息,生成激活的token
    serializer = Serializer(settings.SECRET_KEY, 3600) # 創建愛一個itsdangerous模塊中加密類的對象,其中SECRET_KEY用settings中的,第二個參數為超時時間
    info = {'confirm': user.id} # 被加密的信息,一個字典,字典值為接收郵件用戶的id
    # 利用dumps方法進行加密,加密后為bytes數據
    token = serializer.dumps(info) # bytes數據
    token = token.decode() # bytes轉str
    # 發郵件
    subject = '天天生鮮歡迎信息' # 郵件主題
    message = '' 郵件信息,因為有html__message了,所以這里為空就好
    sender = settings.EMAIL_FROM # 發送者,直接從配置文件中導入上面配置的發送者
    receiver = [email] # 接收者的郵箱,是一個列表,這里是前端用戶注冊時傳過來的 email
    # html結構的信息,其中包含了加密后的用戶信息token
    html_message = '<h2>{},歡迎您成為天天生鮮注冊會員</h2>請點擊下面鏈接激活您的用戶<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)
    # 調用Django發送郵件的方法,這里傳了5個參數
    send_mail(subject, message, sender, receiver, html_message=html_message)
    # 返回應答:跳轉到首頁
    return redirect(reverse('goods:index'))


class ActiveView(View):
  """用戶激活"""
  def get(self, request, token):
    """進行用戶激活"""
    # 進行解密,獲取要激活的用戶信息
    serializer = Serializer(settings.SECRET_KEY, 3600)
    try:
    # 通過itsdangerous模塊的loads方法解密
      info = serializer.loads(token)
      # 獲取待激活用戶的id
      user_id = info.get('confirm')
      # 根據id獲取用戶信息
      user = User.objects.get(id=user_id)
      # 激活用戶操作,將數據庫中對應用戶的is_active參數變為1
      user.is_active = 1
      user.save()
      # 跳轉到登錄界面
      return redirect(reverse('user:login'))
    except SignatureExpired as e:
      # 激活鏈接已經過期
      return HttpResponse('激活鏈接已過期!')

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平乐县| 武安市| 江油市| 乌拉特中旗| 永新县| 四会市| 眉山市| 蒲江县| 炎陵县| 博罗县| 吕梁市| 马龙县| 来安县| 西吉县| 宜春市| 江津市| 滦南县| 垦利县| 垫江县| 肇庆市| 西和县| 盐池县| 清河县| 邳州市| 濉溪县| 会昌县| 鄂尔多斯市| 贺州市| 郴州市| 长丰县| 陈巴尔虎旗| 渑池县| 昆山市| 会宁县| 收藏| 甘德县| 旬邑县| 东源县| 浦城县| 康保县| 岳阳县|