您的位置:首页 > 编程语言 > Go语言

Django应用进阶

2018-07-18 21:48 211 查看

一、邮件发送

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

[code]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

[code]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")

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

[code]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在里面完成验证。

[code]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。

完整代码如下:

[code]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里面的值 )

[code] x <script src="//cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>
<script src="//cdn.bootcss.com/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:
        一致的时候 正常相应

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: