Skip to main content
 首页 » 编程设计

python之无法从 Django 发送 HttpResponse

2025年05月04日21wuhuacong

我正在尝试将添加了 .csv 格式 header 的 JSON 格式发送到前端以供下载。 发送 HTTP 响应时,我遇到了“不是 JSON 可序列化”错误。

我的 views.py 文件:

from datetime import datetime 
from django.shortcuts import render 
from django.http import HttpResponse 
import json as simplejson 
import random 
import csv 
 
def DownloadEventLog(request): 
    downloadeventlog = "[{\"severity\":\"0\",\"description\":\"USB Connected\",\"date\":\"01/01/2015\",\"time\":\"11:35:20\"},{\"severity\":\"3\",\"description\":\"USB Disconnected\",\"date\":\"01/01/2015\",\"time\":\"10:30:19\"}]"; 
 
    data = simplejson.loads(downloadeventlog) 
    response = HttpResponse(content_type='text/csv') 
    response['Content-Disposition'] = 'attachment; filename="eventlog.csv"' 
 
    writer = csv.writer(response) 
    writer.writerow(data[0].keys()) 
    for row in data: 
        writer.writerow(row.values()) 
    print response 
    return HttpResponse(simplejson.dumps(response), content_type = "application/json") 

打印响应 cmd 正在打印:

Content-Type: text/csv 
Content-Disposition: attachment; filename="eventlog.csv" 
 
date,time,severity,description 
01/01/2015,11:35:20,0,"USB Connected" 
02/02/2015,10:30:19,3,"USB Disconnected" 

但是最后一行抛出如下错误:

TypeError at /eventlog/downloadeventlog 
<django.http.response.HttpResponse object at 0x9c059ec>is not JSON serializable 
 
Request Method: POST 
Request URL: http://127.0.0.1:8001/eventlog/downloadeventlog 
Django Version: 1.7.1 
Python Version: 2.7.3 

请您参考如下方法:

simplejson 和 json 不能很好地处理 django 对象。

Django 的内置 serializers只能序列化充满 Django 对象的查询集:

**** To use **** 
 
data = serializers.serialize('json', self.get_queryset()) 
return HttpResponse(data, mimetype="application/json") 

希望对你有帮助