当前位置 博文首页 > 文章内容

    python3 简单邮箱验证的实现 celery异步

    作者: 栏目:未分类 时间:2020-09-22 11:00:48

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    入门级别的 仅供参考

    虚拟环境下 workon ******  安装 celery

    pip install celery  

     

     

     #创建类 继承AbstractUser类,也可根据需求自定义  

    from django.conf import settings
    from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
    from django.contrib.auth.models import AbstractUser
    from django.db import models

    from utils.base_model import BaseModel

    class User(AbstractUser,BaseModel):

    def gennerate_activate_token(self):             #序列化    加密id
      serializer = Serializer(settings.SECRET_KEY,3600)  #过期时间3600秒
      json_str = serializer.dumps({'confirm':self.id})

      return json_str.decode()

      class Meta:
        db_table = 'df_user'              #定义数据库的表名
        verbose_name = '用户'        #admin站点里显示中文
        verbose_name_plural = verbose_name       #显示中文带个s 加上这一行就没了

     #继承的类需要在  settings 里加入:      AUTH_USER_MODEL = 'users.User'

    创建celery_task包--tasks.py

    import os
    # os.environ["DJANGO_SETTINGS_MODULE"] = "review.settings"          #review创建的项目名
    import django
    # django.setup()

    复制一份项目出来上面的内容打开使用的

    from celery import Celery
    # celery 异步处理
    # 指定broker :代理
    # 创建celery应用对象
    from django.conf import settings
    from django.core.mail import send_mail

    connect = Celery('celery_tasks.tasks',broker='redis://127.0.0.1/4')       #redis库做代理实现的异步

    @connect.task
    def selery_send_email(email,token):
      subject = '邮箱验证'
      body = ""
      sender = settings.EMAIL_FROM # 发件人
      receiver = [email,] #接收人
      html_body = "<h1>尊敬的用户, 感谢您注册!" \
          "请你激活<a href = 'http://127.0.0.1:8000/user/activate%s/'>安全链接%s</a></h1>" % (token, token)    #点击激活 request里带这加密的id (token) 进入验证环节
      send_mail(subject,body,sender,receiver,html_message=html_body)

     

     settings.py

    #邮箱验证 配置
    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' #导入邮件模块
    EMAIL_HOST = 'smtp.163.com' # 发邮件主机
    EMAIL_PORT = 25 # 发邮件端口
    EMAIL_HOST_USER = '156********@163.com' # 授权的邮箱
    EMAIL_HOST_PASSWORD = ' *********************** ' # 邮箱授权时获得的密码,非注册登录密码
    EMAIL_FROM = '注册邮箱<156********@163.com>' # 发件人

     

    用户注册****.py中使用  例如:

    账号、密码等验证之后 创建的user对象 可以对账号密码等存入sql库

    user = User.objects.create_user(username,email,password)
    user.is_active = False          #邮箱没验证设置为 false 验证之后改变
    user.save()

    #然后 发送邮箱验证
    token = user.gennerate_activate_token()
    selery_send_email.delay(email,token)

     

    #验证环节函数  例如:

    urlpatterns = [
      url(r'^activate(?P<token>.+)/', views.activate,name='activate'),
    ]

    def activate(request,token):
      serializer = Serializer(settings.SECRET_KEY,3600)   #使用和加密一样的序列化方法
      try:
        json_str = serializer.loads(token)
      except:
        return HttpResponse('连接已过期')

      user_id = json_str['confirm']
      print(user_id)
      try:
        user = User.objects.get(id=user_id)
      except User.DoesNotExist:
        return HttpResponse('账号存在异常')

      user.is_active = True                        #验证通过
      user.save()

    #复制一份项目 在终端cd到该项目

    (django_py3) czpubuntu@czpubuntu:~/review$ celery -A  celery_task.tasks worker -l info