保存邮箱界面如下
接口设计如下
视图逻辑:
因为url是不接受pk参数的,所以UpdateApiView无法确定要更新哪个模型类,所以要重写get_object,告诉他更新哪个模型类。这里更新的是user模型类。
序列化器如下
序列化器中就两个字段id和email,关于这俩字段的方向问题,都不用处理。
id,默认只能做序列化操作。
email,序列化器和反序列化都要做,也是默认。
注意:这里还没有处理到更新邮箱的逻辑,在下边发送邮件的时候,处理。
使用Django发送邮件的方法
在Django配置文件中,设置邮箱的配置信息
EMAIL_BACKEND = ‘django.core.mail.backends.smtp.EmailBackend‘ EMAIL_HOST = ‘smtp.163.com‘ EMAIL_PORT = 25 #发送邮件的邮箱 EMAIL_HOST_USER = ‘xxxxxx@163.com‘ #在邮箱中设置的客户端授权密码 EMAIL_HOST_PASSWORD = ‘xxxxxx‘ #收件人看到的发件人 EMAIL_FROM = ‘python<xxxxxx@163.com>‘
使用Django提供的模块发送邮件
在django.core.mail
模块提供了send_mail
来发送邮件。
send_mail
(subject, message, from_email, recipient_list,html_message=None)
例如:
msg=‘<a href="http://www.xxxxx.com/xxx/xxxxxxxxxxxxxxxxxxxxxx" target="_blank">点击激活</a>‘ send_mail(‘你好,这是一封注册激活邮件‘,‘‘,settings.EMAIL_FROM, [‘xxxxxxx@163.com‘], html_message=msg)
定义发送邮件的任务
配置Email:
使用celery_tasks新建任务email:
配置任务:
需要生成一个类似于这样的链接
这里带了一个参数token=.... 激活用户,其实把用户的ID带上去即可,但是不能直接带上用户id,因为用户可以直接修改,所以需要加密
其实绑定邮箱,就是更新用户的信息,所以需要再邮件序列化器上增加一个update方法
调用了用户模型类对象instance的generate_verify_email_url:(这里的instance指的就是用户对象,user对象)
那么就在user模型类中增加generate_verify_email_url方法
用到的常量
增加一个url
修改user_center_info.js文件,增加save_email方法
// 保存email save_email: function(){ var re = /^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$/; if(re.test(this.email)) { this.email_error = false; } else { this.email_error = true; return; } axios.put(this.host + ‘/email/‘, { email: this.email }, { headers: { ‘Authorization‘: ‘JWT ‘ + this.token }, responseType: ‘json‘ }) .then(response => { this.set_email = false; this.send_email_btn_disabled = true; this.send_email_tip = ‘已发送验证邮件‘ }) .catch(error => { alert(error.data); }); }
启动celery,然后测试
celery -A celery_tasks.main worker -l info
celery收到任务,然后执行。
测试完成
Django商城项目笔记No.14用户部分-用户中心邮箱绑定
原文:https://www.cnblogs.com/blog-rui/p/9939630.html