1.settings同级目录下创建 celery 文件
from __future__ import absolute_import, unicode_literals import os from celery import Celery # 设置环境变量 os.environ.setdefault('DJANGO_SETTINGS_MODULE', '项目名.settings') # 注册Celery的APP app = Celery('项目名') # 绑定配置文件 app.config_from_object('django.conf:settings', namespace='CELERY') # 自动发现各个app下的tasks.py文件 app.autodiscover_tasks()
2 配置settings文件
# 发送方 邮箱账户 my_mail = '4544****@qq.com' # 发送发 邮箱授权码 my_pass = 'd*****' # celery 参数 CELERY_BROKER_URL = 'redis://127.0.0.1:6379/' CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/' CELERY_RESULT_SERIALIZER = 'json'
3 配置 settings同级目录下 init 文件
from __future__ import absolute_import, unicode_literals from .celery import app as celery_app #导包 import pymysql #初始化 pymysql.install_as_MySQLdb() __all__ = ['celery_app']
4 工具py里 创建发邮件的类
from syl.settings import * from celery.task import task # 定义发送邮件的方法 @task def send_mail(subject, content, mailaddr): sleep(5) res = True try: # 声明邮件对象 msg = MIMEText(content, 'plain', 'utf-8') # 设置发送方对象 msg['From'] = formataddr(['自定义标题', my_mail]) # 设置收件方对象 msg['To'] = formataddr(['尊敬的客户', mailaddr]) # 设置标题 msg['Subject'] = subject # 设置smtp服务器 server = smtplib.SMTP_SSL("smtp.qq.com", 465) # 登录邮箱 server.login(my_mail, my_pass) # 发送邮件 server.sendmail(my_mail, [mailaddr], msg.as_string()) # 关闭smtp链接 server.quit() except Exception as e: print(e) res = False return res return res
5 调用接口
class Send_email(APIView): # 注册 def post(self, request):
# 接收邮件的 邮箱 email= request.POST.get('email')
user = User.objects.filter(email=email)
if user: return Response({'code': 222, 'message': '该用户名已被注册'}) try: # 邮件 subject = "账号激活" content = '自定义内容' mail.delay(subject, content,email)
return Response({'code': 200, 'address': '验证链接已发送到您的邮箱,请前往激活账号'}) except Exception as e: print(e) return Response({'code': 400})
6 先启动django项目 然后另开终端 cd到celery 目录下启动celery 服务
celery worker -A 项目名 --loglevel=info --pool=solo
classSyl_user(APIView):# 注册defpost(self, request):# 用户名重复校验 name = request.POST.get('username')# 接收邮件的 邮箱 recipient = request.POST.get('email') user = User.objects.filter(username=name)if user:return Response({'code':222,'message':'该用户名已被注册'}) data = request.POST.copy()# 弹出密码 password = data.pop('password')# 密码加密 password = make_password(password[0])# 密码放回 data['password']= password try: se = UserSer(data=data) se.is_valid() se.save() user = User.objects.get(username=name) uid = user.id plyload ={'iss':'实验二楼','iat':int(time.time()),'exp':int(time.time())+300,'uid': uid,} key = jwt.encode(plyload,'jiang', algorithm='HS256')print(key.decode('utf-8'))# 邮件 subject ="账号激活" content ="点击链接激活账号:http://localhost:8000?token="+ key.decode('utf-8')+'.com' mail.delay(subject, content,recipient)print(recipient)return Response({'code':200,'address':'验证链接已发送到您的邮箱,请前往激活账号'})except Exception as e:print(e)return Response({'code':400,'message': se.errors})