一、流程图
操作思路
进行邮箱验证码验证 比较与输入的验证码 是否一致 一致的话则可以注册
**
- 打开邮箱IMAP/SMTP服务
**
二、代码示例
(1)生成随机验证码
def get_random_str():
# 验证码是由 字母a~z A~Z 数字 0~9 组成
# 在 ascii 码中 小写a的起点是97 大写A起点是65
num_ = [str(var) for var in range(0, 9)] # 数字的
# 使用sample 在列表中随机生成6个任意字母数字
return ''.join(random.sample(num_, 4))
(2)发送邮箱验证码
#定义参数
my_mail='你自己的4@qq.com'
#授权码
my_pass='你自己的授权码'
#定义发送邮件的方法
class Send_EmailCode(APIView):
def post(self,request):
email = request.data.get('email') # 接收到用户的邮箱
print(email)
subject = '验证码验证服务'
code = get_random_str() #生成验证码
content = '您的验证码是%s,有限期为1分钟'%code
res = {}
token = r.get(email)
if token: # 去redis 中查看 是否这个邮箱
res['code'] = 401
res['message'] = "请一分钟后再次发送"
print(token)
return JsonResponse(res)
else:
#声明邮件对象
msg = MIMEText(content,'plain','utf-8')
#设置发送方对象
msg['From'] = formataddr(['在线教育平台',my_mail])
#设置收件方对象
msg['To'] = formataddr(['尊敬的客户',email])
#设置标题
msg['Subject'] = subject
#设置smtp服务器
server = smtplib.SMTP_SSL("smtp.qq.com",465)
#登录邮箱
server.login(my_mail,my_pass)
#发送邮件
server.sendmail(my_mail,[email],msg.as_string())
#关闭smtp链接
server.quit()
r.set(email,code) # 存储到redis
# 设置访问周期为60秒
r.expire(email, 6000)
res['code'] = 200
res['message'] = "验证码已发送"
res['or'] = r.get(email)
return JsonResponse(res)
ps:1.此处封装方法,调用是直接调用,隐藏授权码,防止自己信息暴露
ps:2.将生成的验证码存入redis数据库中 进行比较