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

本文介绍了如何在Django项目中应用邮箱验证,包括在VIEWS和HTML中的设置,以及通过Ajax进行配置。同时,详细说明了在SETTINGS中添加邮箱服务的相关配置,如EMAIL_HOST_USER、EMAIL_HOST_PASSWORD、EMAIL_USE_SSL、EMAIL_HOST和EMAIL_PORT等参数的设置。
摘要由CSDN通过智能技术生成

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’

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值