一.环境
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