嗨嗨~~ 夥伴们,大家好,今天我们要来说明的是,发送验证信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
今天的程序码比前几支的API都还要长一点点,还是要来跟夥伴们说明一下我的程序码。
首先说明一下function,这边因为要处理一些关於验证码的东西,所以整理成一块email_token()
大类别,里面
__init__
:主要是产生一个值作为salt用,当然你也可以用预设salt。
generate_token
、confirm_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
leetcode可以说是工程师的试炼场,收集了许多公司的面试考题,可说是题海无涯,那麽就开始刷题之...
接下来谈谈资料冗余的策略 最简单最好管理的冗余就是完完全全的复制一份在别的地方,就是我们经常说的备份...
有时我们背景需要一些定时任务,Odoo同样也可以设定,依照惯例我们来写一个范例,每半年学生的成绩就要...
AutoML得到的结果,说明如下。见图<AZ-exp4MNIST.png> 当看到 [S...
Maps 今天要来介绍的是在Sass内非常重要而且常用的一个功能 - Maps 之前有提到Maps是...