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