基于django的视频点播网站开发-step12-后台订阅功能
本讲我们会讲到一些关于发邮件的技术。我们知道,订阅功能是一个很常见的功能,当用户订阅某个网站后,网站会通过后台给用户发送网站最新的一些动向,一般是通过邮件来发送的。当你阅读完本节内容,会对发邮件的流程有一个大概的了解。
配置相关参数
发送邮件是需要配置相关参数的,且每个邮件服务商都有自己的配置值,笔者使用的是163邮箱,在settings.py追加如下配置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'# 邮件配置
EMAIL_USE_SSL = True
EMAIL_HOST = 'smtp.163.com'
EMAIL_PORT = 465
EMAIL_HOST_USER = 'net936@163.com'
EMAIL_HOST_PASSWORD = 'your pwd'
一定要记得配置 EMAIL_BACKEND ,因为django默认配置的是一种模拟发邮件的 BackEnd ,并不能使用,故要替换。
实现发邮件
我们先来写订阅推送的路由,
path('subscribe/', views.SubscribeView.as_view(), name='subscribe'),
将路由设置为 SubscribeView
我们先贴出 SubscribeView 的代码
class SubscribeView(SuperUserRequiredMixin, generic.View):def get(self, request):video_list = Video.objects.get_published_list()return render(request, "myadmin/subscribe.html" ,{'video_list':video_list})def post(self, request): video_id = request.POST['video_id']video = Video.objects.get(id=video_id)subject = video.titlecontext = {'video': video,'site_url':settings.SITE_URL}html_message = render_to_string('myadmin/mail_template.html', context)email_list = User.objects.filter(subscribe=True).values_list('email',flat=True)# 分组email_list = [email_list[i:i + 2] for i in range(0, len(email_list), 2)]if email_list:for to_list in email_list:try:send_html_email(subject, html_message, to_list)except smtplib.SMTPException as e:logger.error(e)return JsonResponse({"code": 1, "msg": "发送失败"})return JsonResponse({"code": 0, "msg": "success"})else:return JsonResponse({"code": 1, "msg": "邮件列表为空"})
这是一个普通的视图类,功能是由get和post共同来完成的。get中设置了要显示的模板文件myadmin/subscribe.html,它是下面的样子
当我们要给用户发送邮件的时候,需要先选择要推送的视频。然后点击通知订阅用户,即可触发ajax发送代码,ajax代码位于static/js/myadmin/send_mail.js,里面最终调用的是SubscribeView中的post方法,中post方法中,我们先通过主键获取到视频的当前实例,并且还获取到所有订阅用户的email地址放到email_list中,最后调用send_html_email将邮件发送出去,send_html_email封装在helpers.py,它的具体代码是
def send_html_email(subject, html_message, to_list):plain_message = strip_tags(html_message)from_email = settings.EMAIL_HOST_USERsend_mail(subject, plain_message, from_email, to_list, html_message=html_message)def send_email(subject, content, to_list):try:message = (subject, content, settings.EMAIL_HOST_USER, to_list)send_mass_mail((message,))except smtplib.SMTPException :print("--> send fail")return HttpResponse("fail")else:print("--> send success")return HttpResponse("success")
从代码可以看出,程序最终调用的是django自带的 send_mass_mail 函数,该函数封装了发送邮件的细节。当然还可以使用 send_mail 函数,send_mail每次发邮件都会建立一个连接,发多封邮件时建立多个连接。而 send_mass_mail 是建立单个连接发送多封邮件,所以一次性发送多封邮件时 send_mass_mail 要优于 send_mail。
基于django的视频点播网站开发-step12-后台订阅功能相关推荐
- 基于django的视频点播网站开发-step12-后台订阅功能...
本讲我们会讲到一些关于发邮件的技术.我们知道,订阅功能是一个很常见的功能,当用户订阅某个网站后,网站会通过后台给用户发送网站最新的一些动向,一般是通过邮件来发送的.当你阅读完本节内容,会对发邮件的流程 ...
- 基于django的视频点播网站开发-step2-搭建环境
本讲中,带领大家搭建开发环境.我们会依次安装python.pip.django.mysql和其他的一些必要类库. 安装python 安装 Python 非常简单,去 Python 官方网站 找到 Py ...
- 基于django的视频点播网站开发-step11-后台用户管理功能...
用户管理功能,包含用户添加.列表展示.编辑.删除四大功能.下面我们一一揭晓. 用户添加 我们先实现用户添加功能,我们现在urls.py下添加相关的路由 path('user_add/', views. ...
- 基于django的视频点播网站开发-step10-后台评论管理功能...
本讲中,我们会讲到评论管理功能,数据库中的每一条是来自用户的评价,因此后台中的评论管理只有评论列表和评论删除功能,没有增加评论和编辑评论. 照例我们先添加评论管理的相关路由 path('comment ...
- 基于python的电商网站建设_基于Django的电子商务网站开发
Python的安装 目前市场上Python 2.X系列与Python 3.X系列共存的现象.读者可以安装Python 2.X系列或者Python 3.X系列.如果开发的目的是基于原有Python 2. ...
- 基于Django手机销售网站
1,项目功能: (1)商品分类:该模块中,用户可以根据商品的分类信息进行商品检索. (2)商品预览:该模块主要实现商品的详细信息浏览功能. (3)购物车:用户可以把自己喜欢的商品添加到购物车中. (4 ...
- php动态网站开发论文,浅谈《基于PHP的动态网站开发》课程的项目案例设计
电子论文 浅谈<基于PHP的动态网站开发>课程的项目案例设计 时间:2020年05月25日 所属分类:电子论文 点击次数: [摘要]在教学资源建设中,案例设计建设是非常重要的资源之一.运用 ...
- python毕业设计作品基于django框架校园网站系统毕设成品(3)后台管理功能
整个项目包含了:开题报告 + 开题报告PPT + 任务书 + 中期报告 + 论文模板 + 答辩PPT等 + 项目源码 主要安介绍了系统在开发过程中所应用到的一些关键的技术 主要python技术介绍:框 ...
- 基于python的火车票售票系统/基于django火车票务网站/火车购票系统
摘 要 随着科学技术的飞速发展,社会的方方面面.各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,火车票售票系统当然也不能排除在外.火车票售票系统是以实际运用为开发背景,运用软件工 ...
最新文章
- python3 列表的增删改查
- java 抽象类,接口,object类详解
- 搜索业务增速下滑 Google廉颇老矣?
- 转载一篇NAT实验,备忘
- JavaScript实现跳跃游戏的动态编程自上而下的方法算法(附完整源码)
- linux salt生成,51CTO博客-专业IT技术博客创作平台-技术成就梦想
- matplotlib-快速学习折线图-柱状图2个-饼图-0225
- 终于下决心写一写自己的博客了!
- JAVA RPC (六) 之thrift反序列化RPC消息体
- 数据库设计三大范式应用实例剖析(讲得比较清楚)
- Jupyter Notebook——如何显示目录的导航栏(安装 Jupyter Notebook extension)
- 第九章 搭建Hadoop 2.2.0版本HDFS的HA配置
- qt 日历类 不可输入当前日期之后的日期_UI设计组件时间选择器,日历设计从未如此简单!...
- php中fread用法,php fread函数与fread函数用法
- 【XML系列】----DTD约束(一)
- osgEarth gpx文件 16.feature_gpx.earth
- 基于MATLAB的指纹识别算法仿真实现
- win7计算机时间同步出错,win7系统电脑时间同步出错的解决方法
- 公式图片转换成Word格式
- grafana配置alert