VIEWS
import random,time
from django.core.mail import EmailMultiAlternatives
from django.http import JsonResponse
from Buyer.models import EmailVaild
import hashlib
#定义一个加密函数
def pwd_encrypt(password):
md5 = hashlib.md5()
md5.update(password.encode())
result = md5.hexdigest()
return result
#随机生成4位数
def get_random_data():
number = random.randint(1000,9999) #获得随机四位数
return number
def register_mail(request):
result = {'state':'error','data':''} #用于收集运行结果
if request.method == 'GET':
#1.获取邮箱
email = request.GET.get('email') #从web中获取传过来的参数
if email: #第一次get请求为空, 而第二次AJAX跳转携带参数,所以判断不为空,进行下一步
try:
number = get_random_data()
subject = '小鱼干真好吃' #邮件主题
text_content = '最爱小鱼干'
html_content = '''
<div>
<p>
你的验证码为%d,注册完来买小鱼干吧
</p>
</div>
'''%number
message = EmailMutiAlternatives(subject,text_content,'xxxxx@163.com',[email])
#参数为主题,内容,寄件人邮箱,以及传递过来的邮箱
message.attach_alternative(html_content,'text/html')
message.send()
except Exception as e:
result['data'] = str(e)
else:
result['data'] = 'success'
result['data'] = 'success'
#保存数据
email_vaild = EmailVaild() #创建模型类
email_vaild.value() = number #保存验证码
email_vaild.email_address = email #保存邮箱地址
email_vaild.times = datetime.datetime.now() #记录当前时间
email_vaild.save() #保存到数据库
finally:
return JsonResponse(result)
if request.method == 'POST':#如果是表单提交
#获取表单提交过来的内容
username = request.POST.get('username') #获取邮箱
code = request.POST.get('code') #验证码
userpass = request.POST.get('userpass') #获取密码
email_current = EmailVaild.objects.filter(email_address=username).first() #获取数据库中邮箱对应的第一条数据,
if email_current: #如果数据库中有记录,即不为空
#判断验证码
if code == email_current.value:
now = time.mktime(datetime.datetime.now().timetuple()) #当前时间
db_now = time.mktime(email_current.times.timetuple()) #数据库中保存的时间
#print(now) 可以打印看看
#print(db_now)
if now - db_now >= 360: #间隔6分钟,也可以设置为60秒,这里只是为了测试
result['data'] = '验证码失效,请重新获取'
#删除数据库中的信息
email_current.delete()
else:
#保存此用户
buyer = Buyer()
buyer.name = username
buyer.password = pwd_encrypt(userpass) #这里是对密码进行md5加密加入到数据库中
buyer.save()
result['state'] = 'sucess'
result['data'] = 'sucess'
#删除库中的数据
email_current.delete()
return redirect('/buyer/login/') #重定向到登录界面
else:
result['data'] = '验证码错误'
else:
result['data'] = '用户不存在'
return render(request, 'buyer/register_mail.html')
HTML
配置Ajax
SETTINGS中添加
EMAIL_HOST_USER = ‘xxxx@163.com’ #寄件人地址
EMAIL_HOST_PASSWORD = ‘xxxxx’ #激活码网站获取
EMAIL_USE_SSL = True
EMAIL_HOST = ‘smtp.163.com’
EMAIL_PORT = ‘994’