[Day22] 发送验证信API – views

嗨嗨~~ 夥伴们,大家好,今天我们要来说明的是,发送验证信API的逻辑,以下是我的程序码

程序码

from datetime import datetime               
import json
import uuid                                 
from django.contrib.auth.models import User
from django.http.response import JsonResponse
from django.views.decorators.csrf import csrf_protect
from user.models import UserProfile 
from django.contrib import auth    
from django.contrib.sessions.models import Session
from IThome_Django import settings #新增
from django.core.mail import send_mail #新增
from django.core import signing #新增
import base64 #新增

@csrf_protect
def send(request):              #传送验证信
    if request.method == "POST":
        try:
            data = json.loads(bytes.decode(request.body,"utf-8"))
            token = email_token()
            email = data['email']
            token_s = token.generate_token(email)
            title = "帐号验证"
            meg ="\n".join(["{0}欢迎使用app".format(email),
            "请点选下列连结完成注册:\n",
            "/".join(['127.0.0.1:8000/user/check',token_s])])
            send_mail(title,meg,None,[email])
            message = {'status':'0',"token":token_s}
        except Exception as e:
            print(e)
            message = {'status':'1'}
        return JsonResponse(message)

class email_token():
    def __init__(self): 
        self.salt = str(base64.encodestring(bytes("1_23a48c9710295","utf-8")))
    def generate_token(self, email):
        signer = signing.TimestampSigner(salt=self.salt).sign_object(email)
        return signer
    def confirm_token(self,token):
        email = signing.TimestampSigner(salt=self.salt).unsign_object(token)
        return email

介绍function

今天的程序码比前几支的API都还要长一点点,还是要来跟夥伴们说明一下我的程序码。

首先说明一下function,这边因为要处理一些关於验证码的东西,所以整理成一块email_token()大类别,里面
__init__:主要是产生一个值作为salt用,当然你也可以用预设salt。

generate_tokenconfirm_token:这里我一起说明,因为基本上这两个功能相似,都是使用TimestampSigner,功能为加密签名,可以避免里面的资料被窜改。

我们透过signing.TimestampSigner(salt=self.salt).sign_object(email),存放的讯息是email,加密签名,然後signing.TimestampSigner(salt=self.salt).unsign_object(token)这里的token其实就是加密签名完的资料,解密签名,得到存放的讯息。

透过send_mail寄出信件,那第一个参数是信件标题,第二个参数是信件内容,第三个是寄件者,那因为我们昨天已经在settings设定过预设的寄件者了,所以这边可以写上None,第四个是收件者。

我们今天介绍完发送验证信API,明天接着就是信箱验证API,等明天一起介绍完,我在附上我的测试结果给夥伴们参考。


<<:  Day22. 当苹果掉到牛顿头上,牛顿被敲醒了 - Gravity

>>:  Day23-React Life Cycle 篇-下篇(Updating & Unmounting & Error handling & Render Phase & Commit Phase)

Day29:刷起来! leetcode

leetcode可以说是工程师的试炼场,收集了许多公司的面试考题,可说是题海无涯,那麽就开始刷题之...

Day20 资料冗余和Partition

接下来谈谈资料冗余的策略 最简单最好管理的冗余就是完完全全的复制一份在别的地方,就是我们经常说的备份...

Day20 Let's ODOO: Scheduled Actions

有时我们背景需要一些定时任务,Odoo同样也可以设定,依照惯例我们来写一个范例,每半年学生的成绩就要...

Azure AutoML02及结语

AutoML得到的结果,说明如下。见图<AZ-exp4MNIST.png> 当看到 [S...

[Day 13] Sass - Maps

Maps 今天要来介绍的是在Sass内非常重要而且常用的一个功能 - Maps 之前有提到Maps是...