Django+Celery非同步發送郵件

来源:https://www.cnblogs.com/sajinchang/archive/2018/12/24/10171178.html
-Advertisement-
Play Games

1. 安裝 2. 項目目錄 3. settings配置 4. celery模塊 python 在task文件中 from __future__ import absolute_import, unicode_literals import os from celery import Celery s ...


  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 = '[email protected]'
    EMAIL_HOST_PASSWORD = '**********'
    DEFAULT_FROM_EMAIL = 'sam <[email protected]>'
  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

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 以上實例中,100,1000.0和"John"分別賦值給counter,miles,name變數。 執行以上程式會輸出如下結果: ...
  • 一 開發環境說明: python3.5+wxpython包+math包 win10環境下開發,兼任win7 編譯工具:pycharm 二 運行界面展示: 三 開源共用: 四 打包xe文件下載地址: 百度網盤:https://pan.baidu.com/s/1xn9hjBsAvCFFq8XSpqS0L ...
  • Spring-data-jpa中非常簡單的查詢介面方式與CUBA相結合,簡化CUBA開發人員操作數據的方法,能有效提升代碼質量和交付速度 ...
  • 背景 首先,我們達成以下共識: 一個服務方法,如果入參太多,且基本為非pojo,會給調用方造成不必要的干擾。儘管可以把文檔寫的很完善,但還是建議使用pojo對多個參數合理封裝。 如下示例: 執行方法都應該對入參進行校驗。對於一些 通用的簡單的不涉及業務邏輯 的校驗,比如字元串不為空,數字的範圍限制, ...
  • Java線程通信方法 0、(why)每個線程都有自己的棧空間,我們要線程之間進行交流,合作共贏。 1、synchronized和volatile關鍵字 a) 看下麵的synchronized關鍵字 b) 看下麵的volatile關鍵字 2、等待/通知機制:一個線程A調用對象的wait()方法,另一個 ...
  • 一.遞歸函數的弊端 遞歸函數雖然編寫時用很少的代碼完成了龐大的功能,但是它的弊端確實非常明顯的,那就是時間與空間的消耗。 用一個斐波那契數列來舉例 import time #@lru_cache(20) def fibonacci(n): if n < 2: return 1 else: retur ...
  • 前言 本篇緊接著spring入門詳細教程(一),建議閱讀本篇前,先閱讀第一篇。鏈接如下: Spring入門詳細教程(一) https://www.cnblogs.com/jichi/p/10165538.html 一、spring註入方式 1、set方法註入 2、構造方法註入 3、p名稱空間註入 4 ...
  • JUnit常用單元測試註解介紹及代碼演示 by:授客 QQ:1033553122 1. 測試環境 1 2. 基礎概念 1 3. 常用Annotation 1 4. 運行環境配置 3 maven配置 3 Eclipse maven運行環境配置 4 更新項目 5 5. 單元測試實踐 7 被測類Binar ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...