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

虚拟环境下 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

 

posted @ 2020-09-22 10:57  Py_beginner  阅读(253)  评论(4编辑  收藏  举报