用Django全栈开发(进阶篇)——06. Django + Celery + Flower实现在线监控后台异步耗时操作

本文介绍了如何使用Django+Celery+Flower来实现后台异步处理耗时操作,特别是发送邮件功能。通过配置Django的邮件发送,结合Celery和Redis作为Broker,实现异步任务。最后利用Flower进行在线监控Celery任务,便于管理和调试。
摘要由CSDN通过智能技术生成

大家好,这是皮爷给大家带来的最新的学习Python能干啥?之Django教程的进阶版

在之前《用Django全栈开发》系列专辑里面,皮爷详细的阐述了如何编写一个完整的网站,具体效果可以在代码中获取到。

从进阶篇开始,每一篇文章都是干货满满,干的不行。这一节,我们来说:如何使用Django + Celery + Flower来实现耗时操作编程异步,并且能够在线实时监控。

不吹不黑,这篇文章是全网写的最详细的Celery+Django+Flower的文章。

获取整套教程源码唯一途径,关注『皮爷撸码』,回复『peekpa.com』

皮爷的每一篇文章,都配置相对应的代码。这篇文章的代码对应的Tag是“Advanced_06”。

在这里插入图片描述

耗时操作

可能有同学会问,啥是耗时操作?这么的打个比方:

比如,我们每天访问Peekpa网站的数据中心,看到很多漂亮的小姐姐。突然有一天,皮爷给大家推出了一个『一键发送种子』功能。这个发送邮件的功能,其实对于后台来说就是一个耗时操作。

我们这里就拿Github线上的Peekpa代码给大家做一下例子。我们要实现的操作就是要把日本最近的10条地震信息发送给指定的邮箱。

那么在准备耗时操作之前,我们需要准备一下如何让Django发送邮件。

发送邮件

首先,如果要发送邮件,我们需要注册一个邮箱账号,126,163和QQ邮箱都可以,我们主要使用的是邮箱的SMTP服务。

我们这里以126邮箱为例。

首先注册一个126邮箱账户,请记住邮箱账号和密码。然后登陆到邮箱里面,我们找到设置选项:

在这里插入图片描述

看到关于POP3/SMTP/IMAP这个选项,其实我们的主要目标就是SMTP服务。所以打开这个选项,去页面选择开启SMTP服务:

在这里插入图片描述

在这里,不同的邮件系统可能开通流程不太一样,126的开通流程就是需要用手机APP扫描开通,不管怎么样,开通了SMTP服务就可以了。像上图一样,显示的是开通了服务。

接下来,我们就要确认各个邮件商的SMTP服务地址了,这里皮爷给大家稍微整理了一下,如果没有你注册的邮件的SMTP服务器地址,那就需要自己百度:

SMTP服务器 端口
smtp.126.com 465
smtp.qq.com 465/587
smtp.163.com 465/994

这样准备工作就做完了。我以126邮箱为例,到目前需要记住的有以下内容:

  • 邮箱账号;
  • 邮箱密码;
  • 邮箱的SMTP服务器地址;

接下来,我们要做的就是在Django中配置发邮件的内容了。

Django配置发邮件

Django框架默认是集成了发送邮件功能的。路径是django.core.mail,我们可以直接导入这个路径下的send_mail()方法,直接调动即可完成发送功能。

我们进入源码里面可以看一下send_mail()方法:

def send_mail(subject, message, from_email, recipient_list,
              fail_silently=False, auth_user=None, auth_password=None,
              connection=None, html_message=None):
    """
    Easy wrapper for sending a single message to a recipient list. All members
    of the recipient list will see the other recipients in the 'To' field.

    If auth_user is None, use the EMAIL_HOST_USER setting.
    If auth_password is None, use the EMAIL_HOST_PASSWORD setting.

    Note: The API for this method is frozen. New code wanting to extend the
    functionality should use the EmailMessage class directly.
    """

可以看到,这里传入的参数有一个recipient_list,当Django调用这个方法发送完邮件之后,收件人是能看到其他收件人的邮箱,相当于是一起发送的。这个方法是封装好的方法,如果要使用自定义的,这里说应该直接使用EmailMessage类就好,这个EmailMessage类的路径是django.core.mail里。

这里我们就方便讲解,直接给大家调用send_mail()方法来说。

在发送邮件之前,我们可以简单的在peekpa/settings.py里面这是这么几个参数:

EMAIL_HOST = "smtp.126.com"  # 发送邮件的smtp服务器(从QQ邮箱中取得)
EMAIL_HOST_USER = "glalert@126.com"  # 用于登录smtp服务器的用户名,也就是发送者的邮箱
EMAIL_HOST_PASSWORD = "xxxxxxxx"  # 授权码,和用户名user一起,用于登录smtp, 非邮箱密码
EMAIL_PORT = 465  # smtp服务器SSL端口号,默认是465
EMAIL_USE_SSL = True

这几个参数对应的意思:

  • EMAIL_HOST:这个就是之前上文提到的那个
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值