一.環境
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
eventlet==0.24.1
greenlet==0.4.15
kombu==4.5.0
monotonic==1.5
pytz==2019.1
redis==3.2.1
six==1.12.0
sqlparse==0.3.0
vine==5.0.0a1
2.rabbmitMQ
下載地址 https://www.rabbitmq.com/install-windows.html

如圖1.1,安裝rabbitmq之前需要安裝Erlang,需要確認你選的rabbitmq 所支持的Erlang版本,

根據圖1.2 選擇安裝的支持的Erlang,
下載地址 如圖1.3 http://www.erlang.org/downloads

安裝直接點下一步------
Rabbmq安裝好后,點擊圖1.3 紅色框的內容

出現黑色框框 圖1.5

可視化插件方式啟動rabbitmq
命令:rabbitmq-plugins enable rabbitmq_management
如下圖1.6

啟動成功標志:
瀏覽器打開 http://127.0.0.1:15672
賬戶密碼默認都是guest
如圖1.7

能打開就行
二.Django配置celery
如圖2.1

紅色部分為要添加和修改的內容
__init__.py
---------------------------------------------------------------------#這個是我加的分隔符,里面才是代碼
from __future__import absolute_import, unicode_literals # This will make sure the app is always imported when # Django starts so that shared_task will use this app. from Celery_pro.celeryimport appas celery_app __all__ = ('celery_app',)
---------------------------------------------------------------------
celery.py
---------------------------------------------------------------------
from __future__import absolute_import, unicode_literals import os from celery import Celery #注意下面的 Celery_pro.settings 是我的項目名稱.settings,你的項目名稱就寫你的 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Celery_pro.settings') #這下面的也是 app = Celery('Celery_pro',backend="celery.backends.amqp:AMQPBackend")
app.config_from_object('django.conf:settings',namespace='CELERY') app.autodiscover_tasks( lambda: [n.name for n in apps.get_app_configs()] ) @app.task(bind=True) def debug_task(self): print('Request: {0!r}'.format(self.request))
---------------------------------------------------------------------
在settings.py中 添加設置如下內容
---------------------------------------------------------------------
#存儲任務隊列執行后的結果的BACKEND CELERY_RESULT_BACKEND ='redis://*.*.*.*' #我的服務器IP不能暴露,你也可以寫本地的redis,或者amqp://ip #充當任務隊列的中介者的地址也就是--->rabbmq CELERY_BROKER_URL ='amqp://127.0.0.1//' #放回結果的格式 CELERY_RESULT_SERIALIZER ='json'
---------------------------------------------------------------------
2.2 寫相關的視圖函數,測試
創建一個app名稱為app01,在app01目錄下創建tasks.py
----------------------------------------------------------------------
from __future__import absolute_import, unicode_literals from celeryimport shared_task from django.core.mailimport send_mail from Celery_proimport settings #反轉字符串 @shared_task def reverse(string): return string[::-1] #異步實現發郵件 @shared_task def SendEmail(sub,msg,to_email): try: send_mail( sub, msg, settings.EMAIL_HOST_USER, to_email, fail_silently=False ) except Exception : return False return True
----------------------------------------------------------------------
在視圖函數中代碼如下
----------------------------------------------------------------------
from django.httpimport JsonResponse from django.shortcutsimport render from Celery_proimport settings from .tasksimport * # Create your views here. def index(request): res=reverse.delay('hello world') print(res.get()) return JsonResponse({"status:":"sccessful","task_id":res.task_id}) def sms(request): res=SendEmail.delay('Hello world','give you msg',['求個妹子(填寫你要發送給誰)@qq.com']) res=res.get() print(res) if res: return JsonResponse({"status":"success"}) else: return JsonResponse({"status":"Flase"})
----------------------------------------------------------------------
郵件配置
我的使用QQ郵箱測試的,如圖


賦值授權碼后,記錄好
在settings.py文件添加如下
----------------------------------------------------------------------
STATIC_URL='/static/' EMAIL_BACKEND ='django.core.mail.backends.smtp.EmailBackend' #固定寫法 EMAIL_HOST ='smtp.qq.com' #SMTP地址 EMAIL_PORT =25 #SMTP端口 EMAIL_HOST_USER ='給你看了,你又不做我女盆友' #發送郵件的郵箱 EMAIL_HOST_PASSWORD ='我的授權碼不能給你看' # 授權碼 EMAIL_SUBJECT_PREFIX ='[我想要個女票] ' #為郵件Subject-line前綴,默認是'[django]' EMAIL_USE_TLS =True # 與SMTP服務器通信時,是否啟動TLS鏈接(安全鏈接)默認false
----------------------------------------------------------------------
好了,基本准備完畢
先啟動celery
celery -A Celery_pro worker -l info -P eventlet


啟動django,注意,只能在命令行啟動,點pycharm的啟動鍵會報錯,這是bug我還沒解決
python manage.py runserver

看下路由

我直接訪問http://127.0.0.1:8000 就是反轉視圖函數的字符串,hello world
OK,搞起


好的,sms的視圖搞起



注意對比圖2.12 和2.13的時間,表示 勞資沒有騙你們 ,成功實現發郵件
參考:https://jingyan.baidu.com/article/f3e34a12a356c9f5ea653545.html
轉自:https://www.jianshu.com/p/c1515248e585