首页 > 其他 > 详细

Django商城项目笔记No.14用户部分-用户中心邮箱绑定

时间:2018-11-10 17:20:13      阅读:182      评论:0      收藏:0      [点我收藏+]

保存邮箱界面如下

技术分享图片

接口设计如下

技术分享图片

视图逻辑:

技术分享图片

因为url是不接受pk参数的,所以UpdateApiView无法确定要更新哪个模型类,所以要重写get_object,告诉他更新哪个模型类。这里更新的是user模型类。

序列化器如下

技术分享图片

序列化器中就两个字段idemail,关于这俩字段的方向问题,都不用处理。

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(subjectmessagefrom_emailrecipient_list,html_message=None)

  • subject 邮件标题
  • message 普通邮件正文, 普通字符串
  • from_email 发件人
  • recipient_list 收件人列表
  • html_message 多媒体邮件正文,可以是html字符串

例如:

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

 技术分享图片

配置任务:

技术分享图片

需要生成一个类似于这样的链接

http://www.xxxx.site:8080/success_verify_email.html?token=eyJpYXQiOjE1NDE0MTI5MDUsImV4cCI6MTU0MTQ5OTMwNSwiYWxnIjoiSFMyNTYifQ.eyJ1c2VyX2lkIjoyLCJlbWFpbCI6Ijc1NDIyMDczMkBxcS5jb20ifQ.qo-yjH3gHJqXc8nMdZYBBEbJhX8e9rlVZrVQqXTAAzQ

 这里带了一个参数token=....  激活用户,其实把用户的ID带上去即可,但是不能直接带上用户id,因为用户可以直接修改,所以需要加密

其实绑定邮箱,就是更新用户的信息,所以需要再邮件序列化器上增加一个update方法

技术分享图片

调用了用户模型类对象instancegenerate_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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!