django、celery异步发邮件


  • django自带的send_mail发邮件功能执行发邮件功能会因为网络的原因造成花费的时间过长,为了解决这个问题,可以用celery + redis代替
  • 安装包:
    • pip install celery
    • pip install redis
  • 在django的根目录下新建celery_tasks文件夹,在该文件夹下新建tasks.py:
    •  from celery import Celery
      from django.conf import settings
      from django.core.mail import send_mail app = Celery('celery_tasks.tasks', broker='redis://127.0.0.1:6379/8') @app.task
      def send_register_active_email(email, username, token):
      subject = '测试'
      message = ""
      from_email = settings.EMAIL_FROM
      recipient_list = [email]
      html_message = '<h1>欢迎{}来到测试</h1>请点击下面链接激活<br><a href="http://http://127.0.0.1:8000/user/active?token={}">点击此处激活</a>'.format(
      username, token)
      send_mail(subject, message, from_email, recipient_list, html_message=html_message)


    • 调用该方法:
    •  class Register(View):
      def get(self, request):
      return render(request, 'user/register.html') def post(self, request):
      username = request.POST.get('username', '')
      password = request.POST.get('password', '')
      email = request.POST.get('email', '') # 校验用户名是否重复
      try:
      user = User.objects.get(username=username)
      except User.DoesNotExist:
      user = None if user:
      data = {'errmsg': '用户名已存在'}
      return JsonResponse(data)
      # try:
      # user = User.objects.ger(email=email)
      # except User.DoesNotExist:
      # user = None
      # if user:
      # data = {'errmsg': '邮箱已被注册'}
      # return JsonResponse(data)
      user = User.objects.create_user(username=username, password=password, email=email)
      user.is_active = 0
      user.save() info = {'user_id': user.id}
      serializer = Serializer(settings.SECRET_KEY, 3600 * 2)
      token = serializer.dumps(info).decode() # 发邮件
      send_register_active_email.delay(email, username, token)
      return redirect(reverse('user:login'))
    • worker端配置:
      • 将django项目文件复制到另一个文件夹
      • 修改tasks.py文件,设置初始化
      •  from celery import Celery
        from django.conf import settings
        from django.core.mail import send_mail
        import os
        import django os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dream.settings')
        django.setup() app = Celery('celery_tasks.tasks', broker='redis://127.0.0.1:6379/8') @app.task
        def send_register_active_email(email, username, token):
        subject = '测试'
        message = ""
        from_email = settings.EMAIL_FROM
        recipient_list = [email]
        html_message = '<h1>欢迎{}来到测试</h1>请点击下面链接激活<br><a href="http://127.0.0.1:8000/user/active?token={}">点击此处激活</a>'.format(
        username, token)
        send_mail(subject, message, from_email, recipient_list, html_message=html_message)
      • worker端监听
      • 进入 worker端的代码的celery_tasks目录下:
        • celery -A tasks worker -l info
        • win10下可能报错:
          • pip install eventlet
          • celery -A tasks worker -l info -P eventlet
      • 当django启动调用send_mail的时候就会将发邮件的任务交给celery执行

django、celery异步发邮件的更多相关文章

  1. Django+celery+rabbitmq实现邮件发送

    一.环境 1.pip包 amqp==2.4.2 anyjson==0.3.3 billiard==3.6.0.0 celery==4.3.0 Django==2.2 dnspython==1.16.0 ...

  2. Django --- celery异步任务与RabbitMQ模块

    一 RabbitMQ 和 celery 1 celery Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务, ...

  3. django celery异步框架

    描述:实现运维平台的异步执行与定时任务,以下简单描述了安装过程及使用.   安装django和celery pip install django pip install celery pip inst ...

  4. django celery 异步执行任务遇到的坑

    部署后,任务没有持久化,所有用supervisor 进行进程管理 安装 pip install supervisor 创建 配置文件 [program:testplatform-flower] com ...

  5. Django+Celery 执行异步任务和定时任务

    celery是一个基于python开发的简单.灵活且可靠的分布式任务队列框架,支持使用任务队列的方式在分布式的机器/进程/线程上执行任务调度.采用典型的生产者-消费者模型,主要由三部分组成: 1. 消 ...

  6. Flask-mail 发邮件慢(即使异步)

    Flask-mail 发邮件慢(即使异步) 一开始,按照狗书上的代码异步发邮件,但是发现原本响应只需要150ms的页面加了邮件发送就变成了5s响应(这怕不是假异步) 狗书的异步发邮件代码: def s ...

  7. Django之使用内置函数和celery发邮件

    邮箱配置 开启stmp服务 以163邮箱为例,点击设置里面的stmp 开启客户端授权密码 如上所示,因为我已经开启了,所以出现的是以上页面. 这样,邮箱的准备就已经完成了. 使用Django内置函数发 ...

  8. Django+Celery+xadmin实现异步任务和定时任务

    Django+Celery+xadmin实现异步任务和定时任务 关注公众号"轻松学编程"了解更多. 一.celery介绍 1.简介 [官网]http://www.celerypro ...

  9. Django使用Celery异步任务队列

    1  Celery简介 Celery是异步任务队列,可以独立于主进程运行,在主进程退出后,也不影响队列中的任务执行. 任务执行异常退出,重新启动后,会继续执行队列中的其他任务,同时可以缓存停止期间接收 ...

随机推荐

  1. 鸡汤 & 毒鸡汤

    1.别低估任何人. 2.你没那么多观众,别那么累. 3.温和对人对事.不要随意发脾气,谁都不欠你的. 4.现在很痛苦,等过阵子回头看看,会发现其实那都不算事. 5.和对自己有恶意的人绝交.人有绝交,才 ...

  2. css中:overflow:hidden清除浮动的原理

    要想彻底清除浮动的影响,适合的属性不是 clear 而是 overflow. 一般使用 overflow:hidden,利用 BFC 的“结界”特性彻底解决浮动对外部或兄弟元素的影响. 1. 前言: ...

  3. tesseract的简单使用

    Tesseract 是一个开源的 OCR 引擎,可以识别多种格式的图像文件并将其转换成文本,最初由 HP 公司开发,后来由 Google 维护.下载地址:https://digi.bib.uni-ma ...

  4. 面试官:说说你对css效率的理解

    大家好,我是小雨小雨,致力于分享有趣的.实用的技术文章. 内容分为翻译和原创,如果有问题,欢迎随时评论或私信,希望和大家一起进步. 大家的支持是我创作的动力. 选择器的优先级 众所周知,选择器是有权重 ...

  5. C# 基础知识系列- 2 字符串

    String的常见方法 String 变量的声明方式 C#中字符串常见的声明有两种: 直接使用字面值 即String s = "12321"; 使用构造器,即String s = ...

  6. centos 安装activeMq

    Apache ActiveMQ是一个免费的开源消息代理和集成模式服务器.它支持来自JAVA.c++.C.Python.Perl.PHP等多种语言的客户端和协议.它提供了许多功能,如消息组.虚拟目的地. ...

  7. HDU-1251 统计难题(我就是不用字典树)

    统计难题 ?戳这里可以前往原题 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为 ...

  8. git push错误,如何回滚

    --> git push Counting objects: 81, done.Delta compression using up to 4 threads.Compressing objec ...

  9. BIT-Reverse Pairs

    2019-12-17 11:07:02 问题描述: 问题求解: 本题可以看作是逆序数问题的强化版本,需要注意的是num[i] > 2 * num[j],这里有0和负数的情况. public in ...

  10. Web 服务器压力测试实例详解

    发表于 2012-1-6 14:53 | 来自  51CTO网页 Web 服务器搭建完成上线在即,其能够承载多大的访问量,响应速度.容错能力等性能指标,所有这些是管理人员最想知道也最为担心的.如何才能 ...