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

Django接口返回字典报AttributeError: 'dict'无headers属性求助

问题解决

核心错误原因

Django视图函数必须返回HttpResponse类(或其子类)的实例,你直接返回Python字典,框架尝试调用字典的headers属性时自然会抛出AttributeError。

后端代码修正

使用Django提供的JsonResponse类返回JSON数据,它会自动处理字典序列化并设置正确响应头:

from django.http import JsonResponse
import json
import os
from django.conf import settings

def project(request):
    # 解析请求体
    request_body = json.loads(request.body.decode('utf-8'))
    queryID = request_body['queryID']
    
    # 用os.path.join规范拼接文件路径
    file_path = os.path.join(settings.BASE_DIR, 'projects', f"{queryID}.json")
    
    try:
        with open(file_path, 'r') as f:
            response_data = json.load(f)
            return JsonResponse(response_data)
    except FileNotFoundError:
        # 处理文件不存在的情况,返回404错误
        return JsonResponse({"error": "Project not found"}, status=404)

前端代码修正

请求头里的Accept和Content-Type值错误,应为application/json而非network/json,同时可直接用response.json()解析响应:

const url = "/project"
let id_request = {"queryID": projectID}

fetch(url, {
    method: 'POST',
    mode: "same-origin",
    headers: {
        "Accept": "application/json",
        "Content-Type": "application/json",
        "X-CSRFToken": csrftoken,
    },
    body: JSON.stringify(id_request)
})
.then(response => {
    if (!response.ok) {
        throw new Error(`HTTP error! status: ${response.status}`);
    }
    return response.json();
})
.then(data => { 
    console.log(data); 
})
.catch(error => {
    console.error('请求出错:', error);
});

额外注意事项

  • 确保projects目录存在于Django项目根目录,且JSON文件权限正确
  • 对queryID做合法性校验,避免路径遍历攻击(如用户传入../类恶意ID)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:40:41