欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2019年08月10日 11:36:24   作者:springionic  
這篇文章主要介紹了Django發(fā)送郵件和itsdangerous模塊的配合使用解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

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

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

首先在Django項目的settings文件中配置發(fā)送郵件相關(guān)的配置如下:

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

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

基本邏輯:

  • 利用itsdangerous模塊對鏈接中的用戶信息加密,生成加密后的用戶信息token;
  • 調(diào)用Django發(fā)送郵件的相關(guān)方法,進(jìn)行發(fā)送郵件(郵件的配置已經(jīng)配置好);
  • 郵件發(fā)送的鏈接中有一個可變參數(shù),包含著用戶id加密后的信息;
  • 用戶接收到郵件之后,點(diǎn)擊鏈接,跳轉(zhuǎn)到對應(yīng)的視圖類進(jìn)行處理;
  • 負(fù)責(zé)激活的視圖類,解密用戶的信息,獲取用戶id,查詢到對應(yīng)用戶(在這個過程會判斷被加密的信息是否超時);
  • 將對應(yīng)用戶中數(shù)據(jù)庫中用戶表中 is_active 字段的值改為1,表示此用戶被激活;
  • 跳轉(zhuǎn)到首頁;
# 導(dǎo)入itsdangerous中要用到的加密類
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
# 導(dǎo)入itsdangerous中超時的異常
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ā)送激活郵件,包含一個激活的鏈接:https://127.0.0.1:8000/user/active/3
    # 激活鏈接中需要包含用戶的身份信息,并且要把身份信息進(jìn)行加密

    # 加密用戶的身份信息,生成激活的token
    serializer = Serializer(settings.SECRET_KEY, 3600) # 創(chuàng)建愛一個itsdangerous模塊中加密類的對象,其中SECRET_KEY用settings中的,第二個參數(shù)為超時時間
    info = {'confirm': user.id} # 被加密的信息,一個字典,字典值為接收郵件用戶的id
    # 利用dumps方法進(jìn)行加密,加密后為bytes數(shù)據(jù)
    token = serializer.dumps(info) # bytes數(shù)據(jù)
    token = token.decode() # bytes轉(zhuǎn)str
    # 發(fā)郵件
    subject = '天天生鮮歡迎信息' # 郵件主題
    message = '' 郵件信息,因為有html__message了,所以這里為空就好
    sender = settings.EMAIL_FROM # 發(fā)送者,直接從配置文件中導(dǎo)入上面配置的發(fā)送者
    receiver = [email] # 接收者的郵箱,是一個列表,這里是前端用戶注冊時傳過來的 email
    # html結(jié)構(gòu)的信息,其中包含了加密后的用戶信息token
    html_message = '<h1>{},歡迎您成為天天生鮮注冊會員</h1>請點(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個參數(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ù)庫中對應(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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python3.7添加dlib模塊的方法

    python3.7添加dlib模塊的方法

    這篇文章主要介紹了python3.7添加dlib模塊的方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • 詳解Python手寫數(shù)字識別模型的構(gòu)建與使用

    詳解Python手寫數(shù)字識別模型的構(gòu)建與使用

    這篇文章主要為大家詳細(xì)介紹了Python中手寫數(shù)字識別模型的構(gòu)建與使用,文中的示例代碼簡潔易懂,對我們學(xué)習(xí)Python有一定的幫助,需要的可以參考一下
    2022-12-12
  • Python利用魔法方法玩轉(zhuǎn)對象

    Python利用魔法方法玩轉(zhuǎn)對象

    Python中魔法方法(magic method)其實就是那些被雙下劃線包圍的方法,這些魔法方法為類添加了**“魔力”,讓我們可以在面向?qū)ο缶幊讨杏酶雍啙嵉拇a來操作對象,下面我們就來具體了解一下如何利用魔法方法玩轉(zhuǎn)對象吧
    2023-12-12
  • 讓python json encode datetime類型

    讓python json encode datetime類型

    python2.6+ 自帶的json模塊,不支持datetime的json encode,每次都需要手動轉(zhuǎn)為字符串,很累人,我們可以自己封裝一個簡單的方法處理此問題。
    2010-12-12
  • Python實現(xiàn)的破解字符串找茬游戲算法示例

    Python實現(xiàn)的破解字符串找茬游戲算法示例

    這篇文章主要介紹了Python實現(xiàn)的破解字符串找茬游戲算法,簡單分析了找茬游戲的原理,并結(jié)合具體實例形式分析了Python實現(xiàn)破解找茬游戲的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-09-09
  • 關(guān)于python中的xpath解析定位

    關(guān)于python中的xpath解析定位

    這篇文章主要介紹了關(guān)于python中的xpath解析定位,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python itertools.product方法代碼實例

    Python itertools.product方法代碼實例

    這篇文章主要介紹了Python itertools.product方法代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • 詳解用python自制微信機(jī)器人,定時發(fā)送天氣預(yù)報

    詳解用python自制微信機(jī)器人,定時發(fā)送天氣預(yù)報

    這篇文章主要介紹了用python自制微信機(jī)器人,定時發(fā)送天氣預(yù)報,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 使用python提取PowerPoint幻燈片中表格并保存到文本及Excel文件

    使用python提取PowerPoint幻燈片中表格并保存到文本及Excel文件

    owerPoint作為廣泛使用的演示工具,常被用于展示各類數(shù)據(jù)報告和分析結(jié)果,其中,表格以其直觀性和結(jié)構(gòu)性成為闡述數(shù)據(jù)關(guān)系的不二之選,本文將介紹如何使用Python來提取PowerPoint幻燈片中的表格,并將表格數(shù)據(jù)寫入文本文件以及Excel文件,需要的朋友可以參考下
    2024-06-06
  • python2和python3的輸入和輸出區(qū)別介紹

    python2和python3的輸入和輸出區(qū)別介紹

    這篇文章主要介紹了python2和python3的輸入和輸出區(qū)別介紹,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-11-11

最新評論