1 # 固定写法 2 EMAIL_BACKEND = ‘django.core.mail.backends.smtp.EmailBackend‘ 3 # smtp服务器地址 4 EMAIL_HOST = ‘smtp.qq.com‘ 5 # 固定端口号 6 EMAIL_PORT = 25 7 #发送邮件的邮箱 8 EMAIL_HOST_USER = ‘2746565701@qq.com‘ 9 #在邮箱中设置的客户端授权密码 10 EMAIL_HOST_PASSWORD = ‘ytnvwapcbxmcdfig‘ 11 #收件人看到的发件人,尖括号中的必须与上面的user一致 12 EMAIL_FROM = ‘天天生鲜<2746565701@qq.com>‘
基本逻辑:
1 # 导入itsdangerous中要用到的加密类 2 from itsdangerous import TimedJSONWebSignatureSerializer as Serializer 3 # 导入itsdangerous中超时的异常 4 from itsdangerous import SignatureExpired 5 # 导入配置文件 6 from django.conf import settings 7 # 导入Django中的发送邮件的方法 8 from django.core.mail import send_mail 9 from .models import User 10 11 12 13 # Create your views here. 14 class RegisterView(View): 15 """注册""" 16 .................... 17 18 def post(self, request): 19 """进行注册处理""" 20 21 # 发送激活邮件,包含一个激活的链接:https://127.0.0.1:8000/user/active/3 22 # 激活链接中需要包含用户的身份信息,并且要把身份信息进行加密 23 24 # 加密用户的身份信息,生成激活的token 25 serializer = Serializer(settings.SECRET_KEY, 3600) # 创建爱一个itsdangerous模块中加密类的对象,其中SECRET_KEY用settings中的,第二个参数为超时时间 26 info = {‘confirm‘: user.id} # 被加密的信息,一个字典,字典值为接收邮件用户的id 27 # 利用dumps方法进行加密,加密后为bytes数据 28 token = serializer.dumps(info) # bytes数据 29 token = token.decode() # bytes转str 30 # 发邮件 31 subject = ‘天天生鲜欢迎信息‘ # 邮件主题 32 message = ‘‘ 邮件信息,因为有html__message了,所以这里为空就好 33 sender = settings.EMAIL_FROM # 发送者,直接从配置文件中导入上面配置的发送者 34 receiver = [email] # 接收者的邮箱,是一个列表,这里是前端用户注册时传过来的 email 35 # html结构的信息,其中包含了加密后的用户信息token 36 html_message = ‘<h1>{},欢迎您成为天天生鲜注册会员</h1>请点击下面链接激活您的用户<br><a href="http:127.0.0.1:8000/user/active/{}">http:127.0.0.1:8000/user/active/{}</a>‘.format(username, token, token) 37 # 调用Django发送邮件的方法,这里传了5个参数 38 send_mail(subject, message, sender, receiver, html_message=html_message) 39 # 返回应答:跳转到首页 40 return redirect(reverse(‘goods:index‘)) 41 42 43 class ActiveView(View): 44 """用户激活""" 45 def get(self, request, token): 46 """进行用户激活""" 47 # 进行解密,获取要激活的用户信息 48 serializer = Serializer(settings.SECRET_KEY, 3600) 49 try: 50 # 通过itsdangerous模块的loads方法解密 51 info = serializer.loads(token) 52 # 获取待激活用户的id 53 user_id = info.get(‘confirm‘) 54 # 根据id获取用户信息 55 user = User.objects.get(id=user_id) 56 # 激活用户操作,将数据库中对应用户的is_active参数变为1 57 user.is_active = 1 58 user.save() 59 # 跳转到登录界面 60 return redirect(reverse(‘user:login‘)) 61 except SignatureExpired as e: 62 # 激活链接已经过期 63 return HttpResponse(‘激活链接已过期!‘)
Django发送邮件和itsdangerous模块的配合使用
原文:https://www.cnblogs.com/springionic/p/10926778.html