You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript Fetch调用Django视图时出现JSONDecodeError问题

问题原因

Django的request对象的body是类似文件的流对象,只能被读取一次。你在视图中连续两次调用json.load(request),第一次读取后流的指针已移到末尾,第二次调用时无内容可读,因此抛出JSONDecodeError。浏览器的错误是因为服务器返回500错误页面(HTML格式),而前端尝试将其解析为JSON导致的,解决后端问题后该错误会自动消失。

修复方案

将JSON数据一次性读取并解析到变量中,后续从该变量获取所需字段,避免重复读取request body:

修改后的views.py代码:

if request.method == 'PUT':
    user = CustomUser.objects.get(username=kwargs.get('username'))
    
    # 一次性解析所有JSON数据到payload变量
    payload = json.load(request)
    switchType = payload['type']
    switchData = payload['switch']
    print(switchType, switchData)
    
    if switchType == 'adminUser':
        user.admin_user = switchData
    elif switchType == 'admindata':
        user.admin_data = switchData
    elif switchType == 'Status':
        if user.status == COMMON.USER_ACTIVE:
            user.status = COMMON.USER_SUSPENDED
        else:
            user.status = COMMON.USER_ACTIVE
        user.failed_logins = 0

    user.save()
    return JsonResponse({})
额外说明
  • 前端代码无需修改,Content-Type: application/json和CSRF Token的设置都是正确的。
  • 若后续需要避免字段缺失导致的KeyError,可以使用get方法获取字段,比如switchType = payload.get('type', '')。

内容的提问来源于stack exchange,提问作者Ross

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 07:20:28