飞行的猪哼哼

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一:用户个人信息展示:

1:给user的模型类增加字段,重新进行迁移建表。

 email_active = models.BooleanField(default=False, 
                                       verbose_name='邮箱验证状态')
python3 manage.py makemigration
python3 manage.py migrate

2:显示个人信息的视图和路由:
视图: users.views.UserInfoView

class UserInfoView(View):

    def get(self, request):

        user = request.user

        info_data = {
            "username" : user.username,
            "mobile": user.mmobile,
            "email": user.email,
            "email_active": user.email_active,
        }

        return JsonResponse({
            "code": 0,
            "errmsg": "ok",
            "info_data": info_data,
        })

3:路由:

path('info/', views.UserInfoView.as_view()),

4:效果:
在这里插入图片描述

二:添加和验证邮箱:

1:添加邮箱视图:
逻辑分析:前端传来json数据,从数据中拿到email,写入数据库。

class EmailView(View):

    def put(self, request):

        user = request.user
        data = json.loads(request.body.decode())

        email = data.get("email")

        if not email:
            return JsonResponse({
                "code": 400,
                "errmsg": "缺失参数"
            })
        if not re.match("",email):
            return JsonResponse({
                "code": 400,
                "errmsg": "邮箱格式不正确"
            })

        try:
            user.email = email
            user.save()
        except Exception as e:
            return JsonResponse({
                "code": 400,
                "errmsg": "数据库错误"
            })

        return JsonResponse({
            "code": 400,
            "errmsg": "ok"
        })

2:路由:path('emails/', views.EmailView.as_view()),
3:验证结果:
在这里插入图片描述
在这里插入图片描述
2:验证邮箱的配置: dev.py

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# 我们使用的 smtp服务器 地址
EMAIL_HOST = 'smtp.163.com'
# 端口号
EMAIL_PORT = 25
# 下面的内容是可变的, 随后台设置的不同而改变:
# 发送邮件的邮箱
EMAIL_HOST_USER = '17852032949@163.com'
# 在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = 'JWYWWUXXCQSAYFTYSSZ'
# 收件人看到的发件人
EMAIL_FROM = '美多商城<17852032949@163.com>'

3:使用异步发送邮件:
3.1:在 celery_tasks.email.tasks.py 中添加如下代码:

from django.core.mail import send_mail
from django.conf import settings
import logging
logger = logging.getLogger('django')
from celery_tasks.main import celery_app

# 定义一个发送函数, 发送 email:
@celery_app.task(name='send_verify_email')
def send_verify_email(to_email, verify_url):

      # 标题
    subject = "美多商城邮箱验证"
      # 发送内容:
    html_message = '<p>尊敬的用户您好!</p>' \
                   '<p>感谢您使用美多商城。</p>' \
                   '<p>您的邮箱为:%s 。请点击此链接激活您的邮箱:</p>' \
                   '<p><a href="%s">%s<a></p>' % (to_email, verify_url, verify_url)


      # 进行发送
    result = send_mail(subject,
               "",
               settings.EMAIL_FROM,
               [to_email],
               html_message=html_message)

    return result

3.2:在main.py中注册task

celery_app.autodiscover_tasks(['celery_tasks.sms', 'celery_tasks.email'])

3.3:由于在email/tasks中用到了django的配置文件,但是异步任务不会主动寻找django的配置文件,所以需要在main.py中配置一下加载django的配置文件。

if not os.getenv('DJANGO_SETTINGS_MODULE'):
    os.environ['DJANGO_SETTINGS_MODULE'] = 'meiduo_mall.settings.dev'

3.4:调用发送邮件异步任务:apps/users/views/EmailView.py

# # 调用发送的函数:
        # verify_url = '邮件验证链接'
        # send_verify_email.delay(email, verify_url)

        # 用定义好的函数替换原来的字符串:
        verify_url = generate_verify_email_url(request)
        # 发送验证链接:
        send_verify_email.delay(email, verify_url)

3.5:在users.utils.py中封装生成激活链接的函数:

from django.conf import settings

from meiduo_mall.utils.secret import SecretOauth


# 2.生成激活链接
def generate_verify_email_url(request):
    # 1.user_id email
    data_dict = {
        'user_id': request.user.id,
        'email': request.user.email
    }
    # 2.将参数加密
    dumps_data = SecretOauth().dumps(data_dict)

    # 3.拼接 完整的激活路由
    verify_url = settings.EMAIL_VERIFY_URL + dumps_data

    return verify_url

3.6:在dev中配置邮箱验证链接:

EMAIL_VERIFY_URL = 'http://www.meiduo.site:8080/success_verify_email.html?token='

3.7:启动异步进行验证:

celery -A celery_tasks.main worker -l info
posted on 2020-09-19 12:17  飞行的猪哼哼  阅读(34)  评论(0)    收藏  举报