django、celery异步发邮件
django、celery异步发邮件
- django自带的send_mail发邮件功能执行发邮件功能会因为网络的原因造成花费的时间过长,为了解决这个问题,可以用celery + redis代替
- 安装包:
- pip install celery
- pip install redis
- 在django的根目录下新建celery_tasks文件夹,在该文件夹下新建tasks.py:
from celery import Celery
from django.conf import settings
from django.core.mail import send_mail app = Celery('celery_tasks.tasks', broker='redis://127.0.0.1:6379/8') @app.task
def send_register_active_email(email, username, token):
subject = '测试'
message = ""
from_email = settings.EMAIL_FROM
recipient_list = [email]
html_message = '<h1>欢迎{}来到测试</h1>请点击下面链接激活<br><a href="http://http://127.0.0.1:8000/user/active?token={}">点击此处激活</a>'.format(
username, token)
send_mail(subject, message, from_email, recipient_list, html_message=html_message)- 调用该方法:
class Register(View):
def get(self, request):
return render(request, 'user/register.html') def post(self, request):
username = request.POST.get('username', '')
password = request.POST.get('password', '')
email = request.POST.get('email', '') # 校验用户名是否重复
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
user = None if user:
data = {'errmsg': '用户名已存在'}
return JsonResponse(data)
# try:
# user = User.objects.ger(email=email)
# except User.DoesNotExist:
# user = None
# if user:
# data = {'errmsg': '邮箱已被注册'}
# return JsonResponse(data)
user = User.objects.create_user(username=username, password=password, email=email)
user.is_active = 0
user.save() info = {'user_id': user.id}
serializer = Serializer(settings.SECRET_KEY, 3600 * 2)
token = serializer.dumps(info).decode() # 发邮件
send_register_active_email.delay(email, username, token)
return redirect(reverse('user:login'))- worker端配置:
- 将django项目文件复制到另一个文件夹
- 修改tasks.py文件,设置初始化
from celery import Celery
from django.conf import settings
from django.core.mail import send_mail
import os
import django os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dream.settings')
django.setup() app = Celery('celery_tasks.tasks', broker='redis://127.0.0.1:6379/8') @app.task
def send_register_active_email(email, username, token):
subject = '测试'
message = ""
from_email = settings.EMAIL_FROM
recipient_list = [email]
html_message = '<h1>欢迎{}来到测试</h1>请点击下面链接激活<br><a href="http://127.0.0.1:8000/user/active?token={}">点击此处激活</a>'.format(
username, token)
send_mail(subject, message, from_email, recipient_list, html_message=html_message)- worker端监听
- 进入 worker端的代码的celery_tasks目录下:
- celery -A tasks worker -l info
- win10下可能报错:
- pip install eventlet
- celery -A tasks worker -l info -P eventlet
- 当django启动调用send_mail的时候就会将发邮件的任务交给celery执行
django、celery异步发邮件的更多相关文章
- Django+celery+rabbitmq实现邮件发送
一.环境 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 ...
- Django --- celery异步任务与RabbitMQ模块
一 RabbitMQ 和 celery 1 celery Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务, ...
- django celery异步框架
描述:实现运维平台的异步执行与定时任务,以下简单描述了安装过程及使用. 安装django和celery pip install django pip install celery pip inst ...
- django celery 异步执行任务遇到的坑
部署后,任务没有持久化,所有用supervisor 进行进程管理 安装 pip install supervisor 创建 配置文件 [program:testplatform-flower] com ...
- Django+Celery 执行异步任务和定时任务
celery是一个基于python开发的简单.灵活且可靠的分布式任务队列框架,支持使用任务队列的方式在分布式的机器/进程/线程上执行任务调度.采用典型的生产者-消费者模型,主要由三部分组成: 1. 消 ...
- Flask-mail 发邮件慢(即使异步)
Flask-mail 发邮件慢(即使异步) 一开始,按照狗书上的代码异步发邮件,但是发现原本响应只需要150ms的页面加了邮件发送就变成了5s响应(这怕不是假异步) 狗书的异步发邮件代码: def s ...
- Django之使用内置函数和celery发邮件
邮箱配置 开启stmp服务 以163邮箱为例,点击设置里面的stmp 开启客户端授权密码 如上所示,因为我已经开启了,所以出现的是以上页面. 这样,邮箱的准备就已经完成了. 使用Django内置函数发 ...
- Django+Celery+xadmin实现异步任务和定时任务
Django+Celery+xadmin实现异步任务和定时任务 关注公众号"轻松学编程"了解更多. 一.celery介绍 1.简介 [官网]http://www.celerypro ...
- Django使用Celery异步任务队列
1 Celery简介 Celery是异步任务队列,可以独立于主进程运行,在主进程退出后,也不影响队列中的任务执行. 任务执行异常退出,重新启动后,会继续执行队列中的其他任务,同时可以缓存停止期间接收 ...
随机推荐
- JAVAEE学习day06,面向对象
1.面向对象与面向过程思想 什么时面向过程: 面向过程的每一个步骤和过程,把每一个步骤和过程完成,然后又这些功能相互调用,完成需求 强调的时过程,所有的事情都需要自己完成 什么时面向过程: 面向对象思 ...
- asp.net里获取或设置textarea/asp:Textbox/dropdownlist/CheckBox 的值
1. textarea .asp:label 和 tasp:extbox 的text文本值: <textarea id="txt_remark" runat=" ...
- ExifPro Mod 3.0 64位绿色中文版
EXIFPro 是一个优秀的图像查看, 处理及管理工具, 使用 VC++ 开发, 小巧快速, 支持查看丰富的 EXIF 信息, 非常适用于查看您的 RAW 数字照片和其他常规图像.EXIFPro V1 ...
- C语言-转义字符
%d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 %e 指数形式的浮点数 %X 无符号以十六进制表示的整数 ...
- MySQL:REPLACE函数的使用
原文链接 REPLACE函数功能 REPLACE(columnName, search_str, replace_str) 查找columnName字段中所有search_str,并替换为replac ...
- git常用命令学习配详细说明
原文链接 把当前目录变成Git可以管理的仓库 git init 查看仓库当前的状态 git status 添加新/变动文件 git add <文件名> // 添加某个新文件(目录) git ...
- 在ASP.NET MVC中如何预防Cookie的窃取攻击(转载)
Cookie Cookie is a small piece of data sent by a web server to a web browser. The browser stores thi ...
- GitLab私服在Ubuntu上搭建总结
1.前期准备: sudo apt-get update sudo apt-get install -y curl openssh-server ca-certificates sudo apt-get ...
- Java基础语法(6)-注释
title: Java基础语法(6)-注释 blog: CSDN data: Java学习路线及视频 用于注解说明解释程序的文字就是注释. 提高了代码的阅读性:调试程序的重要方法. 注释是一个程序员必 ...
- python txt文件批处理
首先,切换文件路径到所在文件夹 然后,将txt文件内容按行读取,写入到all.txt def txtcombine(): files=glob.glob('*.txt') all = codecs.o ...