MultiValueDictKeyError 错误解决(前后端分离)

报错概览:

报错一般如图:

该问题常见于前端用form表单向后端提交数据时,

大致的意思是在获取参数的时候没有找到名为user的参数,可以前端解决,也可以后端解决。

 

问题解决方法

   分析问题来源:

    1)对于参数,前后端命名不一致导致的,将命名更改一致即可

前端(wx):

后端(django):

  可以看到前端传过来的名字是name,但是后端是以username接受的,当然找不到了

2)前后端在传参/收参的时候没有注意格式,前后端某一方需要做格式转换

  如果经过检查(比如前端去network查看详细的请求),发现参数名字是一致的,但就是报这个错(本人就是这个问题),这个时候不妨检查一下请求数据的格式,前端到底是json格式还是             formdata格式传的数据,后端又是怎么接收的(默认是formdata)

   用api文档发一下请求可以很快检查出这个问题,看下哪个是500,哪个是200就知道了

  

问题一后端解决方法:

   将request.POST['name']更换为request.POST.get(''name);

  这样在获取不到值的时候会返回none而不是错误,可以增强代码的健壮性,但是不校验数据合法    性的话可能出现非法数据。

问题二后端解决方法:

  如果前端是以json的格式传过来的数据,后端做个转换即可

def login(request):

   #把这种写法改成下面的写法即可
   #name = request.POST['name']

   postBody = request.body
   json_result = json.loads(postBody)
   name = json_result['name']   


  tips:一般来说只有post请求需要改,get请求可以用request.GET方式获取(get请求是params参数)

问题二前端解决方法:

 如果后端不好添加,前端将传数据的方式改为用formdata的形式传即可,这个根据使用的软件的不同,写的方式也不同,建议自行搜索一下匹配自己使用的软件的写法

//此处是声明的方法,如何写到请求里面要结合具体情况
let formData = new FormData()
formData.append('name',name)
formData.append('password',pass)

  

    

     

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值