python - 无法从 Django 发送 HttpResponse

标签 python django python-2.7

我正在尝试将添加了 .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")

希望对你有帮助

关于python - 无法从 Django 发送 HttpResponse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29798486/

相关文章:

python - 在不使用 python 请求模块的情况下进行此 API 调用的最佳替代方法是什么?

python - 在 Django 中生成给定查询集的所有可能子集

python-2.7 - 如何将 markupsafe 安装到我的 Flask virtualenv 中?

python - 如何将抖动添加到具有 X 和 Y 值的散点图?

javascript - EBNF 语法分析器模块

python - 在 Django 项目中设置日志文件的最大大小

django - Auto_now_add = true 字段不会出现在管理部分,因为它们不可编辑 - 你能让它们出现吗?

python - 如何替换多元函数中一个变量的值?

python-2.7 - Python 中的 PDF 到 Word 文档

带有 * 的 Python zip 行为