• Django+Celery异步发送邮件


    1. 安装

      pip install django==1.11.7
      pip install celery
      
    2. 项目目录

       AXF
          ├── alipay_config
          │   ├── alipay_rsa_public_key.pem
          │   └── app_rsa_private_key.pem
          ├── App
          │   ├── admin.py
          │   ├── apps.py
          │   ├── __init__.py
          │   ├── migrations
          │   │   ├── __init__.py
          │   │   └── __pycache__
          │   ├── models.py
          │   ├── __pycache__
          │   ├── tests.py
          │   ├── urls.py
          │   ├── views_contstant.py				封装发送邮件函数
          │   └── views.py
          ├── AXF
          │   ├── __init__.py
          │   ├── __pycache__
          │   ├── settings.py
          │   ├── urls.py
          │   └── wsgi.py
          ├── task.py								celery异步任务							
          ├── manage.py
          ├── middleware
          ├── static
       
      
    3. settings配置

      #email
      EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
      EMAIL_USE_TLS = False
      EMAIL_USE_SSL = True
      EMAIL_HOST = 'smtp.163.com'
      EMAIL_PORT = 465
      EMAIL_HOST_USER = 'sajinde@163.com'
      EMAIL_HOST_PASSWORD = '**********'
      DEFAULT_FROM_EMAIL = 'sam <sajinde@163.com>'
      
    4. celery模块

      #在task文件中
      
      
      from __future__ import absolute_import, unicode_literals
      import os
      
      from celery import Celery
      
      # set the default Django settings module for the 'celery' program.
      #		AXF.settings:项目下的settings文件
      os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'AXF.settings')
      
      
      broker = 'redis://127.0.0.1:6379/6'  # 将要进行的任务
      backend = 'redis://127.0.0.1:6379/7' # 返回的结果
      app = Celery('App', broker=broker, backend=backend)
      # app = Celery('App')
      
      # Using a string here means the worker doesn't have to serialize
      # the configuration object to child processes.
      # - namespace='CELERY' means all celery-related configuration keys
      #   should have a `CELERY_` prefix.
      # app.config_from_object('django.conf:settings', namespace='CELERY')
      
      # Load task modules from all registered Django app configs.
      app.autodiscover_tasks()		#自动搜索所有的任务
      
      'debug开启'
      # @app.task(bind=True)
      # def debug_task(self):
      #     print('Request: {0!r}'.format(self.request))
      
    5. App下的init文件

      from __future__ import absolute_import, unicode_literals
      from task import app as celery_app
      
      __all__ = ['celery_app']
      
    6. 发送邮件

      from celery import shared_task
      
      @shared_task		#可多次重用,@shared_task装饰可以让你无需任何具体的应用程序实例创建任务
      def send_register_mail(username, email, token):
          # 发送邮件
          print('------------------------------------')
          sleep(10)
          print('------------------------------------')
          title = '激活'
          msg = ' '
      
          data = {
              'username': username,
              'url': 'http://127.0.0.1:8000/app/active/?token=' + token
          }
          temp = loader.get_template('user/active.html')
          html = temp.render(data)
      
          receiver = [
              email,
          ]
      
          send_mail(title,
                    msg,
                    from_email=settings.DEFAULT_FROM_EMAIL,
                    recipient_list=receiver,
                    html_message=html)
      
          print('send mail')
      
    7. 发送邮件调用

      send_register_mail.delay(username, email, token)
      
    8. 开启任务队列

      celery -A task worker -l info		或者
      celery -A task worker --loglevel=info
      
  • 相关阅读:
    delphi7下调用微软的Web Services的心得
    Asp.net组件设计浅论
    STC系统烧写及STC12C5A60S2最小系统
    ENET 1.3.3 VC2005 下使用
    ENet library compilation record
    51定时器
    可靠的UDP编程(ENET库)
    ASP.NET MVC3布局页与分布页调用方式概述
    排除JQuery通过HttpGet调用WebService返回Json时“parserror”错误
    AJAX数据源协调处理思路
  • 原文地址:https://www.cnblogs.com/sajinchang/p/10171178.html
Copyright © 2020-2023  润新知