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
相关产品推荐
相关产品推荐

