Django+Celery异步发送邮件

本文详细介绍如何在Django项目中整合Celery,实现异步任务处理,特别聚焦于使用Celery进行邮件发送功能的封装与调用。通过具体的代码示例,展示了设置Celery配置、定义异步任务、以及如何在Django应用中调用这些任务的过程。
  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

转载于:https://www.cnblogs.com/sajinchang/p/10171178.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值