一、发送邮件
发送邮件功能也不仅仅可以用于邮箱验证,也可以在一些其他的场合使用,比如通知顾客新品上市。
1.1、setting设置:
# 发送邮件配置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# smtp服务地址
EMAIL_HOST = 'smtp.qq.com'
# 端口默认都是25不需要修改
EMAIL_PORT = 25
# 发送邮件的邮箱,需要配置开通SMTP
EMAIL_HOST_USER = '167616915@qq.com'
# 在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = 'psmqdtxvjkvbbicc'
# 收件人看到的发件人
EMAIL_FROM = 'lyj<167616915@qq.com>'
# 这⾥必须是True,否则发送不成功
EMAIL_USE_TLS = True
1.2、视图函数设置:
from django.core.mail import send_mail
from django.conf import settings
def send_email(request):
# 想要发送的内容
msg = '测试django发送邮箱'
send_status = send_mail(
# 发送邮件的主题
subject='请注意这是Django邮件测试',
# 发送的内容
message=msg,
# 发送邮件的邮箱
from_email=settings.EMAIL_HOST_USER,
# 把这条邮件信息发送给xxxx@qq.com的邮箱
recipient_list=["1961558693@qq.com"]
)
if send_status:
return HttpResponse('测试邮件已发出请注意查收')
二、邮箱认证
邮箱认证主要是认证邮箱的真实性,我们不能确定这个邮箱是不是顾客自己的,是不是顾客自己编造的,所以我们需要认证一下
1.1、业务逻辑
1.处理⽤户注册数据,存⼊数据库,is_active字段设置为False,⽤户未认证之前不允许登陆
2.产⽣token,⽣成验证连接URL
3.发送验证邮件
4.⽤户通过认证邮箱点击验证连接,设置is_active字段为True,可以登陆
5.若验证连接过期,删除⽤户在数据库中的注册信息,允许⽤户重新注册 (username、email字段具有唯⼀性)
1.2、产生token
from itsdangerous import URLSafeTimedSerializer as utsr
import base64
from django.conf import settings as django_settings
class Token:
def __init__(self, security_key):
self.security_key = security_key
# 盐是秘钥的编码
self.salt = base64.encodebytes(security_key.encode('utf-8'))
# 生成token,token中可以保存一段信息,这里我们选择保存username
def generate_validate_token(self, username):
serializer = utsr(self.security_key)
return serializer.dumps(username, self.salt)
# 验证token
def confirm_validate_token(self, token, expiration=3600):
serializer = utsr(self.security_key)
return serializer.loads(token, salt=self.salt, max_age=expiration)
# 删除token
def remove_validate_token(self, token):
serializer = utsr(self.security_key)
print(serializer.loads(token, salt=self.salt))
return serializer.loads(token, salt=self.salt)
# 定义为全剧变量,而且我们可以看到这里是将我们的setting中的一个字符串作为salt进行的加密
token_confirm = Token(django_settings.SECRET_KEY)
1.3、配置urls
urlpatterns = [
path('token/<str:tokenstr>', views.token, name='token'),
path('get_token/',views.get_token,name='get_token'),
]
1.4、配置视图函数
def token(request,tokenstr):
try:
username = token_confirm.confirm_validate_token(tokenstr)
except:
username = token_confirm.remove_validate_token(tokenstr)
'''此处进行复杂的逻辑验证,验证通过的话激活用户'''
return HttpResponse(username)
def get_token(request):
url = 'http:127.0.0.1:8000/app/token/' + token_confirm.generate_validate_token(username='username')
'''此处将这个url发送到客户邮箱,我们这里就不进行邮件发送的操作了'''
return HttpResponse(url)
1.5、验证
我们访问http://127.0.0.1:8000/app/get_token/的到网址http:127.0.0.1:8000/app/token/InVzZXJuYW1lIg.YgX3GQ.mczVD57iF1e1_Rnuuhyf_hTN84M,我们再次访问这个网址得到我们的username,再次去数据库查询,查询到这个username并且此用户的状态为未激活,那我们就激活它