注册用户并发送邮件

邮箱配置

# 在 settings 下配置邮件发送
# 配置邮件发送
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.qq.com'  # 如果为163邮箱,设置为smtp.163.com
EMAIL_PORT = 25  # 或者 465/587是设置了 SSL 加密方式
# 发送邮件的邮箱
EMAIL_HOST_USER = '自己邮箱'
# 在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = '邮箱设置-->账户-->开启服务  如图'  # 第三方登陆使用的授权密码
EMAIL_USE_TLS = True  # 这里必须是 True,否则发送不成功
# 收件人看到的发件人, 必须是一直且有效的
EMAIL_FROM = '脑瓜疼<自己邮箱>'
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER

在 views 中导包

# 如果没有 itsdangerous 包
pip install itsdangerous
# 发送邮箱配置
from django.conf import settings
# 邮箱注册
from django.core.mail import send_mail
# 加密
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
# 过期异常处理
from itsdangerous import SignatureExpired
#  配置密钥  失效时间
serializer=Serializer(settings.SECRET_KEY,180)

注册

class Register(APIView):
    def post(self,request):
        name=request.data.get('username')
        word=request.data.get('password')
        word1=request.data.get('password1')
        email=request.data.get('email')
        if not re.match(r'[0-9a-zA-Z]{0,19}@(.*?).com',email):
            return Response({'msg':'邮箱错误','code':400})
        user=User.objects.filter(username=name).first()
        if user:
            return Response({'msg':'用户已存在','code':400})
        if word==word1:
            data={'username':name,'password':make_password(word),'email':email}
            user_serializer=UserModelSerializer(data=data)
            if user_serializer.is_valid():
                user_serializer.save()
                # 数据保存以后,可以进行发邮件
                user_obj=user_serializer.data
                # 把用户信息制作成字典 
                user_info={'user_id':user_obj.get('id')}
                # 用户信息序列化加密
                token=serializer.dumps(user_info).decode()
                # 标题
                subject='好又多会员注册'
                # 消息
                message='欢迎注册好又多商城会员'
                # 和 settings中的 EMAIL_FROM 匹配
                from_email=settings.EMAIL_FROM
                # 那个邮箱接收这个消息
                recipient_list=[email]
                html_message='<h3>欢迎注册好又多商城会员,请点击以下链接进行激活:</br><a href="http://127.0.0.1:8000/app01/register/?token={}">激活用户点这里</a></h3>'.format(token)
                send_mail(subject=subject,
                          message=message,
                          recipient_list=recipient_list,
                          from_email=from_email,
                        html_message=html_message)
                return Response({'msg':'注册成功','code':200})
            else:
                return Response({'msg':'注册失败','code':400})
        else:
            return Response({'msg':'两次密码不一致','code':400})

解密

    def get(self,request):
        print(request.GET.get('token'))
        token=request.GET.get('token')
        try:
            #  序列化解密 token值
            user_info=serializer.loads(token)
            print(user_info)
            return Response({'msg': 'OK', 'code': 200, 'token':user_info})
        except SignatureExpired:
            return Response({'msg':'激活失败','code':200})
原文地址:https://www.cnblogs.com/Beginner-Y/p/13033753.html