7、邮箱验证码的功能设计

新建app专门处理邮箱验证码的获取、发送和处理功能

新建app:utils

生产和储存邮箱验证信息

新建eamil_send.py文件,用于获取、储存用户在注册、找回密码时提交的数据字段和系统自动生成的随机邮箱验证码字符串

# -*- coding: utf-8 -*-
__author__ = 'oldlee'
__date__ = '2019-04-23 17:49'

from random import Random

from users.models import EmailVerifyRecord


#随机生成一串字符串
def random_str(randomlength=8):
    str = ''
    chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
    length = len(chars) - 1
    random = Random()
    for i in range(randomlength):
        str+=chars[random.randint(0, length)]
    return str


# 定义验证码发送方法,并传入一个邮箱地址和验证码类型(默认为rigister)
def send_register_email(email,send_type='register'):
    # 实例化users的model里的邮箱验证码类,对验证码进行赋值存储
    email_recode = EmailVerifyRecord()
    # 利用上面的随机字符串方法创建一个16位的字符串并赋值给code
    code = random_str(16)
    # 然后把code赋值给users里的验证码类里的code,作为用户邮箱验证码
    email_recode.code = code
    email_recode.email = email
    email_recode.send_type = send_type
    email_recode.save()
    # 以上就成功把用户在注册或者找回密码时提交的字段和系统随机生成字符串保存在了数据库中

发送邮件

内容准备好之后,我们利用Django为我们提供的函数发送邮件:

包含上面的完整发送邮件的代码:

较上面的代码,增加了

导入了send_mail包,添加了发送邮件的内容

from random import Random
from django.core.mail import send_mail

from users.models import EmailVerifyRecord
from shengxianshop.settings import EMAIL_FORM


def random_str(randomlength=8):
    str = ''
    chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
    length = len(chars) - 1
    random = Random()
    for i in range(randomlength):
        str+=chars[random.randint(0, length)]
    return str


# 定义验证码发送方法,并传入一个邮箱地址和验证码类型(默认为rigister)
def send_register_email(email,send_type='register'):
    # 实例化users的model里的邮箱验证码类,对验证码进行赋值存储
    email_recode = EmailVerifyRecord()
    # 利用上面的随机字符串方法创建一个16位的字符串并赋值给code
    code = random_str(16)
    # 然后把code赋值给users里的验证码类里的code,作为用户邮箱验证码
    email_recode.code = code
    email_recode.email = email
    email_recode.send_type = send_type
    email_recode.save()
    # 以上就成功把用户在注册或者找回密码时提交的字段和系统随机生成字符串保存在了数据库中

    # 定义邮件标题和内容
    email_title = ''
    email_body = ''

    # 如果发送邮件的类型是注册,就定义邮件内容
    if send_type == 'register':
        email_title = '欧德李学习社区'
        email_body = '欧德李社区激活链接:http://127.0.0.1:8000/active/{0}'.format(code)
        
        #调用send_mail函数,传入邮件标题和内容、setting.py文件中的EMAIL_FORM和邮箱list
        send_start = send_mail(email_title,email_body,EMAIL_FORM,[email])

配置setting.py中的邮件信息:


EMAIL_HOST = 'smtp.sina.cn'
EMAIL_POST = 25
EMAIL_HOST_USER = '这里是邮箱@sina.cn'
EMAIL_HOST_PASSWORD = '这里是密码'
EMAIL_USE_TLS = False
EMAIL_FORM = '这里是邮箱@sina.cn'

最后,在view.py文件中的登录方法中调用发送邮件的函数:

并传入邮箱列表和发送类型(此处以register注册为例)

 

你可能感兴趣的:(python实战)