zoukankan      html  css  js  c++  java
  • Django商城项目笔记No.14用户部分-用户中心邮箱绑定

    保存邮箱界面如下

    接口设计如下

    视图逻辑:

    因为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收到任务,然后执行。

    测试完成

  • 相关阅读:
    职工工资管理系统 c++课程设计
    我的Python自学之路四,字符串的学习
    我的Python自学之路三:元组及字典学习总结
    我的Python自学之路二:列表学习
    我的Python自学之路一:Python学习路线
    vue项目里在微信浏览器调用微信分享及支付一些页面数据的坑
    vue 三种传值方法
    vue里swiper的一些坑
    js 数据导出为txt文件
    js 小数计算为啥和想象中不一样!
  • 原文地址:https://www.cnblogs.com/blog-rui/p/9939630.html
Copyright © 2011-2022 走看看