(1)task.pylinux
pip install celery redisredis
from celery import Celery from flask import Flask from flask_mail import Message from exts import mail,alidayu import config app=Flask(__name__) app.config.from_object(config) mail.init_app(app) alidayu.init_app(app) # 運行本文件: # 在windows操做系統上: # celery -A tasks.celery worker --pool=solo --loglevel=info # 在linux操做系統上: # celery -A tasks.celery worker --loglevel=info def make_celery(app): celery = Celery(app.import_name, backend=app.config['CELERY_RESULT_BACKEND'], broker=app.config['CELERY_BROKER_URL']) celery.conf.update(app.config) TaskBase = celery.Task class ContextTask(TaskBase): abstract = True def __call__(self, *args, **kwargs): with app.app_context(): return TaskBase.__call__(self, *args, **kwargs) celery.Task = ContextTask return celery celery = make_celery(app) @celery.task def send_mail(subject,recipients,body): message = Message(subject=subject,recipients=recipients,body=body) mail.send(message) # @celery.task # def send_sms_captcha(telephone,captcha): # alidayu.send_sms(telephone,code=captcha)
(2)config.pyflask
# celery的配置 CELERY_RESULT_BACKEND = "redis://127.0.0.1:6379/0" CELERY_BROKER_URL = "redis://127.0.0.1:6379/0"
(3)cms/views.pywindows
@bp.route('/email_captcha/') def email_captcha(): #獲取要修改的郵箱 email = request.args.get('email') if not email: return restful.params_error('請輸入要修改的郵箱') #獲得大小寫字母的列表 source = list(string.ascii_letters) #獲得大小寫字母的列表 + 0到9的數字字符串 source.extend(map(lambda x: str(x), range(0, 10))) # 隨機取六位做爲驗證碼 captcha = "".join(random.sample(source, 6)) #給這個郵箱發送郵件驗證碼 # message = Message(subject='derek論壇密碼修改郵件發送', recipients=[email,], body='你的驗證碼是:%s'%captcha) # try: # mail.send(message) # except: # return restful.server_error() #celery異步發送郵件 send_mail.delay('derek論壇密碼修改郵件發送', [email], '你的驗證碼是:%s' % captcha) #把郵箱和驗證碼保存到memcached中 zlcache.set(email,captcha) return restful.success()