vue+django前后端分离,如何解决csrf传输问题

使用django时,django框架都会自带csrf的验证功能,根据django的使用文档一般是在前端页面的form表单里添加{% csrf_token %}标签,当浏览器加载该页面时,django会解析模板页面,渲染{% csrf_token %}为一个input标签,如下图所示:
html页面代码

<form>
	{%   csrf_token %}
	.....
</form>

django渲染后的html代码
在这里插入图片描述
经过上面的分析,我们可以清晰的了解到,原生django在使用过程中,csrf会自动通过表单提交将token值传输到后台。

如果前端采用vue的模式开发web页面,就要面临{% csrf_token %}无法被渲染的问题,因为vue的前端页面都是通过js动态渲染生成的,即使你再组件页面里添加了{% csrf_token %}标签,最后也会被编码到js文件中而不是html文件中,django渲染时只会对html渲染。

解决方法:
django提供了获取csrf_token值的方法:

#
from django.middleware.csrf import get_token
def foo(request):
		csrf_token = get_token(request)   //此时可以获取到csrf_token的值

**前端代码:**前端在POST之前先通过get的方式把csrf_token获取到

this.$http.post(
		'/index/', 
		formData, {
		//POST之前先通过get的方式把csrf_token获取到,并赋值给this.csrf
         			headers: { 'Content-Type': 'multipart/form-data', 'X-CSRFToken': this.csrf},
       				}).then(function (res) {
             ....
          }, function (res) {
            ......
          });

上传这种方式相当于手动将csrf值获取到然后在重新传给后台验证,而原生的django其实是帮你做了处理。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值