频道栏目
首页 > 资讯 > 其他综合 > 正文

Django应用进阶教程

18-07-20        来源:[db:作者]  
收藏   我要投稿

一、邮件发送

首先需要再项目的铯ttings.py文件中,添加以下文件:

EMAIL_USE_SSL = True

EMAIL_HOST = 'smtp.qq.com'  # 如果是 163 改成 smtp.163.com

EMAIL_PORT = 465

EMAIL_HOST_USER = environ.get("EMAIL_SENDER") # 帐号

EMAIL_HOST_PASSWORD = environ.get("EMAIL_PWD")  # 授权码(****)

DEFAULT_FROM_EMAIL = EMAIL_HOST_USER

其中,用户名和密码也可以写出来,账号是自己的邮箱,授权码需要打开邮箱的smtp服务,登陆相关网站进行开启就可以啦~

其次,我们需要在views.py 中来进行调用和定义发生送的邮件。

from django.core.mail impport send_mail

def send_my_email(req):
    title="恭喜发财"
    msg="咸鱼婷她真的只是一条咸鱼"
    email_from=settings.DEFAULT_FROM_EMAIL
    reciver=[
        'ergouzi@qq.com'
        ]
    #开始发送邮件
    send_email(titile,msg,email_from,reciver)
    return HttpResponse("666")

这样就可以发送,也可以定义一个发送页面:

def send_my_email_v1(req):
    title="....."
    msg="此处为空"
    email_from="....."
    reciver=[
        '接收者邮箱地址'
]
#加载模板
    template=loader.get_template("email.html")
#渲染模板    
    html_str=template.render({'msg'}:'吼吼吼')
#发送
    send_email=(title,msg,email_from,reciver,html_message=html_str)
    return HttpResponse("7777")

进阶:邮箱验证码的实现

步骤:1-生成随机字符串

2-拼接激活链接url

3-把随机字符串和发送的邮箱保存到缓存(需要添加缓存的配置,上一节有讲)

4-创建激活页面

5-将激活页面发送给对应的账号

6-写验证链接对应的API在里面完成验证。

def verify(req):
    if req.method=="GET":
    return render(req,'verify.html')
    else:
    params=req.POST
    email=params.get('email')
    #生成随机字符
    random_str=get_random_str()
    #验证拼接链接
    url=""自己的服务器+端口号/t8/active/" + random_str"
    #加载激活模板
    tem=loader.get_template('activate.html')
    #渲染模板
    html_str=tem.render({'url':url})
    #准备发送的数据,发送邮件,格式同上
    ...
    ...
    send_mail(title, msg, email_from, reciever, html_message=html_str)
    #记录token 对应的邮箱是谁
    cache.set(random_str,email,120)
    return HttpResponse("ok")
#激活API
def active(req,random_str):
    res=cache.get(random_str)
    if res:
        return HttpResponse(res+"激活成功")
    else:
        return HttpResponse("验证连接无效")

三、一次发送多封邮件

需要利用:send_mail VS send_mass_mail

send_mail:没法送一封邮件,就要和SMTP做一次链接

send_mass_mail:可以一次连接大宋多封Email。

完整代码如下:

def send_many_email(req):
    title = "加油"
    content1 = "恭喜帅磊磊喜提高铁一辆"
    email_from = settings.DEFAULT_FROM_EMAIL
    reciever1 = [
        '0070@qq.com',
        '68924@qq.com'
    ]
    content2="皮一下,超好玩的"
    #邮件1&2
    msg1 = (title, content1, email_from, reciever1)
    msg2 = ("小哥哥", content2, email_from,
          ['0070@qq.com','83603@qq.com'])
    #使用send_mass_mail
    send_mass_mail((msg1, msg2), fail_silently=True)
    return HttpResponse("ok 666")

四、CSRF(CROSS SITE REQUEST FORKEY)跨站请求伪造

攻击流程(用户A访问可信站点1时,浏览器会保存网站的cookie,当用户A访问不可信站点2时,如果站点2有指向站点1的链接的时候 ,攻击就有可能发生

原理:当浏览器第一次和django服务做就交互的时候,django服务会在浏览器的cookie里加入csrdtoken.

举例:

1- 包含站点1的链接,点击跳转。

2-img的src属性值是站点一的链接.

3-js加载,js里面有跳转的动作。

DJANGO解决办法:

预防被csrf攻击的方法就是在用户的提交表单中加一个csrf的隐含值,这个值和服务器中保存的cerftoken相同。

前后端的使用:

后端:

全局使用(禁用):将settings.py里的csrf中间件注释掉

局部使用或禁用

from django.views.decorators.csrf import csrf_exempt(不使用CSRF验证),

csrf_protect(使用CSRF校验)

前端:

Form表单({%csrf_token%} )

Ajax方式(var csrf = $.cookie("csrftoken"); 拿cookie里面的值 )

 x<script src="../../jquery/3.1.1/jquery.min.js"></script>
<script src="../../jquery-cookie/1.4.1/jquery.cookie.js"></script>
var csrf = $.cookie("csrftoken");  
 function commit() {   
  var csrf = $.cookie("csrftoken");   
    console.log(csrf);     
   var u_name = $("#u_name").val();  
   var num = $("#num").val();   
  $.ajax({       url:"/t8/csrf",   
        method:"post",    
   data:{  "u_name": u_name,  
      "num": num, 'csrfmiddlewaretoken': csrf       },  
     success:function (data) {   
      alert(data); 
 }  })   }

quesstion:Django是如何实现防止攻击的?

answer:1-当浏览器和服务器做交互的时候,服务器会生成一个随机的token,然后把这个字符串保存到浏览器的co

cookie里,同时在页面中添加隐藏的input标签,值就是csrf_token.

2-以后在和服务器做post请求的时候,前端页面要带着csrf_token

3-服务器就会去校验前端传过来的csrf_token,是不是一致,

if 不一致:
return 403 禁止访问
else:
一致的时候 正常相应

相关TAG标签
上一篇:mysql线上环境安装配置实操作教程
下一篇:use dockerfile to build image实例详解
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站