您的位置:首页 > 编程语言 > Go语言

Django之邮箱验证在项目中的应用

2019-03-12 20:28 148 查看

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’

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: