BBS后台发送邮件&修改文章
一:Django发送邮件
在setting中配置

# EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.qq.com' # 如果是 163 改成 smtp.163.com
EMAIL_PORT = 465
EMAIL_HOST_USER = '306334678@qq.com' # 帐号
EMAIL_HOST_PASSWORD = '***' # 密码
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
#这样收到的邮件,收件人处就会这样显示
#DEFAULT_FROM_EMAIL = 'lqz<'306334678@qq.com>'
EMAIL_USE_SSL = True #使用ssl
#EMAIL_USE_TLS = False # 使用tls #EMAIL_USE_SSL 和 EMAIL_USE_TLS 是互斥的,即只能有一个为 True

view视图函数

from django.core.mail import send_mail
import threading
from mybbs import settings t = threading.Thread(target=send_mail, args=("您的文章%s新增了一条评论内容" ,
'ddd',
settings.EMAIL_HOST_USER,
["616564099@qq.com"])
)
t.start()

一次性发多封邮件

from django.core.mail import send_mass_mail
message1 = ('第一封邮件标题', '这是邮件内容', 'from@example.com', ['first@example.com', 'other@example.com'])
message2 = ('第二封邮件标题', '这是邮件内容', 'from@example.com', ['second@test.com'])
'''
fail_silently: (可选)布尔值。为 False 时, send_mail 会抛出 smtplib.SMTPException 异常。smtplib 文档列出了所有可能的异常。 这些异常都是 SMTPException 的子类
'''
send_mass_mail((message1, message2), fail_silently=False)
'''
send_mail 每次发邮件都会建立一个连接,发多封邮件时建立多个连接。而 send_mass_mail 是建立单个连接发送多封邮件,所以一次性发送多封邮件时 send_mass_mail 要优于 send_mail。
'''

携带附件或发送html(需要接收方支持)

from django.core.mail import EmailMultiAlternatives
# subject 主题 content 内容 to_addr 是一个列表,发送给哪些人
msg = EmailMultiAlternatives('邮件标题', '邮件内容', '发送方', ['接收方'])
msg.content_subtype = "html"
# 添加附件(可选)
msg.attach_file('test.txt')
# 发送
msg.send()

备注:send_mail 每次发邮件都会建立一个连接,发多封邮件时建立多个连接。而 send_mass_mail 是建立单个连接发送多封邮件,所以一次性发送多封邮件时 send_mass_mail 要优于 send_mail。
二: 修改文章
前端代码
{% extends 'back/back_base.html' %}
{% block home %}
<div>
<p>修改文章</p>
<form action="/add_article/" method="post">
{% csrf_token %}
<p>标题</p>
<p><input type="text" name="title" class="form-control" id="title" article_id="{{ article_id }}"></p>
<p>内容(KindEdit编辑器,不支持拖放/粘贴上传图片)</p>
<p>
<textarea name="content" id="editor_id" cols="30" rows="10">
</textarea>
</p>
<input type="submit" class="btn btn-danger" value="提交">
</form>
</div>
<script charset="utf-8" src="/static/kindeditor/kindeditor-all.js"></script>
<script>
KindEditor.ready(function (K) {
window.editor = K.create('#editor_id', {
width: '100%',
height: '500px',
//item 控制要显示的控件
//控制控件不能拖动
resizeType: 0,
//上传图片,uploadJson 指的是上传的路径,也就是咱们的路由
uploadJson: '/upload_img/',
//添加一些额外的参数
extraFileUploadParams: {
'csrfmiddlewaretoken': '{{ csrf_token }}',
'article_id': '1'
},
//修改默认上传文件的名字
filePostName: 'myfile'
})
});
//当页面加载完成以后,发ajax请求,拿回文章数据
//jquery 的页面加载完成
$(function () {
var id = $("#title").attr('article_id')
$.ajax({
url: '/get_article/' + '{{ article_id }}',
type: 'get',
success: function (data) {
console.log(data)
$("#title").val(data.title)
// 设置HTML内容
window.editor.html(data.content);
}
})
})
/*
window.onload = function () {
//拿到我隐藏的id
var id = $("#title").attr('article_id')
$.ajax({
url: '/get_article/' + '{{ article_id }}',
type: 'get',
success: function (data) {
console.log(data)
$("#title").val(data.title)
// 设置HTML内容
window.editor.html(data.content);
}
})
}
*/
</script>
{% endblock %}
后台逻辑
@login_required
def update_head(request):
if request.method=='GET':
return render(request,'update_head.html')
else:
myfile = request.FILES.get('head')
# 可以只删除数据库的地址,不删实际文件
user = request.user
user.avatar = myfile
user.save() # 如果直接这样更新,不会带avatar那个路径,所以不能用这种方式来更新
# ret=models.UserInfo.objects.filter(pk=request.user.pk).update(avatar=myfile) return redirect('/index/') # def update_article(request,pk):
# if request.method=='GET':
# article=models.Article.objects.get(pk=pk)
# return render(request,'back/update_article.html',{'article':article}) def update_article(request,pk):
if request.method=='GET':
return render(request,'back/update_article2.html',{'article_id':pk}) def get_article(request,pk):
article=models.Article.objects.get(pk=pk) return JsonResponse({'title':article.title,'content':article.content})
BBS后台发送邮件&修改文章的更多相关文章
- 1211 BBS后台管理文章添加
目录 昨日内容回顾 侧边栏inclusion_tag inclusion_tag的响应 使用 自定义inclusion_tag,标签,过滤器 文章的点赞点踩 前端 后端 校验规则 文章的评论功能 1. ...
- dedecms后台每页文章条数如何修改(“文档列表”每一页显示的文档条数)
小明在学习采集,弄了个dedecms作为发布平台,几个小时后跑来报喜说好简单,但又不想制造那么多spam,每个分类只保留几条就好.在后台删除这些文章,每页只显示30个,看了下有100多页,立马沮丧了, ...
- Android 后台发送邮件 (收集应用异常信息+Demo代码)
上一次说了如何收集我们已经发布的应用程序的错误信息,方便我们调试完善程序.上次说的收集方法主要是把收集的信息通过Http的post请求把相关的异常信息变成请求参数发送到服务器.这个对做过web开发的人 ...
- 去除DEDECMS后台预览文章URL地址多余的数字信息
在使用织梦模板时发现这样一个问题:在后台预览文章的时候,出现的文章网址尽管是静态URL,但是会在网址的尾部出现问号并跟随一个时间戳,在复制URL时就显得很不方便.那么如何解决这一问题呢? 经过查找资料 ...
- dedecms后台批量替换文章中的关键词
DEDECMS怎么样能快捷或者批量修改网站所有文章的超链接和锚文本,超链和所有关键词锚文本的链接需要修改? dedecms后台批量替换文章中的关键词
- WordPress批量修改文章内容、URL链接、文章摘要
通过SQL语句来批量修改wordpress博客内容,文章中所有语句都使用默认的wp_表前缀,如果您的数据表前缀不是wp_则需要在语句中作相应更改. 方法/步骤 批量修改文章内容 如果您想替换之前写 ...
- Django学习(八)---修改文章和添加文章
博客页面的修改文章和添加新文章 从主页点击不同文章的超链接进入文章页面,就是传递了一个id作为参数,然后后台代码根据这个参数从数据库中取出来对应的文章,并把它传递到前端页面 修改文章和添加新文章,是要 ...
- dedecms批量修改文章为待审核稿件怎么操作
dedecms批量修改文章为待审核稿件要怎么操作呢?因为我们有时会出于某些原因要把文章暂时先隐藏掉,dedecms有一个比较好的功能是将文件状态设为未审核前台就可以看不到了,那要怎么批量设置呢?到后台 ...
- ueditor1_4_3_3编辑器修改文章
html的body中: <script id="editor" type="text/plain" ></script> js中: // ...
随机推荐
- JS、Jquery获取浏览器和屏幕各种高度宽度
网页可见区域宽:document.body.clientWidth网页可见区域高:document.body.clientHeight网页可见区域宽:document.body.offsetWidth ...
- 使用appassembler-maven-plugin插件生成启动脚本
appassembler-maven-plugin可以自动生成跨平台的启动脚本,省去了手工写脚本的麻烦,而且还可以生成jsw的后台运行程序. 首先pom引入相关依赖 <build> < ...
- 如何在B2C电子商务网站后台添加CNZZ统计代码(转)
CNZZ作为网站流量数据统计分析工具的一种,和百度统计工具类似,同样也是用于查看分析网站所有流量数据来源的一种站长工具,当然商家可根据自己的习惯在B2C电子商务网站后台添加相应的数据统计代码来管理您的 ...
- mysql 执行批量的sql
<?xml version="1.0" encoding="utf-8" ?> <dbconfig> <!-- 数据库驱动 --& ...
- 在 windows7 中使用 vs2003 时,“在文件中查找”导致无响应的问题
解决 Win7 32bit/64bit环境下,在使用VS2003的查找功能时,会导致VS2003无响应. 解决方法:找到VS2003的安装目录,修改"...\Microsoft Visual ...
- 小程序WXML基本使用
数据绑定 <!--wxml--> <view> {{message}} </view> // page.js Page({ data: { message: 'He ...
- idea完成分支和主干的合并
我们在开发一个项目的时候,我们可能会创建一个分支和一个主干.对于分支而言,我们一般在开发的时候可能会使用,但是在项目上线的时候,我们抽取的项目的地址可能是主干的svn地址,这时我们需要将分支上的svn ...
- Java面向对象-Java类的继承及super关键字
Java面向对象-Java类的继承 1,继承定义以及基本使用 定义:子类能够继承父类的属性和方法: 注意点:Java中只支持单继承: 私有方法不能继承: 上代码: package com.java12 ...
- Mycat实战之配置EP分片
ER分片介绍 以mycat逻辑库里面自带的例子,例如客户(CUSTOMER)跟订单(orders)以及订单条目(orders_item),订单条目依 赖订单表,订单表依赖客户,这样客户与订单以及订单条 ...
- 【原】Coursera—Andrew Ng机器学习—编程作业 Programming Exercise 2——逻辑回归
作业说明 Exercise 2,Week 3,使用Octave实现逻辑回归模型.数据集 ex2data1.txt ,ex2data2.txt 实现 Sigmoid .代价函数计算Computing ...