大家好,这是皮爷给大家带来的最新的学习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
:这个就是之前上文提到的那个