我在 Django 应用程序中有许多视图,它们都返回如下内容:
return HttpResponse(jsonpickle.encode(data, unpicklable=False), 'application/json')
这很好用,但我想在 JSON 编码上创建一个抽象并创建响应对象,这样我就可以做类似的事情
return JsonResponse(data)
班级JsonResponse
为我做了所有繁重的工作。
我试过这样的事情:
class JsonResponse(HttpResponse):
def __init__(self, obj):
super(HttpResponse, self).__init__(jsonpickle.encode(obj, unpicklable=False), 'application/json')
但是当我拥有它时,我会在A server error occurred. Please contact the administrator.
查看网页时获得标准。我还尝试使用 withself
作为内部调用的第一个参数,__init__
以及使用名为 (content
和content_type
分别) 的参数以及使用和不使用 named的参数status=200
。这些变化似乎都没有改变任何东西。
开发服务器的终端输出更具描述性,但不是很多:
Traceback (most recent call last):
File "/usr/lib/python2.7/wsgiref/handlers.py", line 85, in run
self.result = application(self.environ, self.start_response)
File "/usr/local/lib/python2.7/dist-packages/Django-1.5.1-py2.7.egg/django/core/handlers/wsgi.py", line 267, in __call__
start_response(force_str(status), response_headers)
File "/usr/lib/python2.7/wsgiref/handlers.py", line 175, in start_response
assert int(status[:3]),"Status message must begin w/3-digit code"
ValueError: invalid literal for int() with base 10: 'app'
[02/Jun/2013 00:51:06] "GET / HTTP/1.1" 500 59
我知道我可以创建一个返回的方法HttpResponse
,如下所示:
def json(obj):
return HttpResponse(...)
但如果可能的话,我想学习一种按照我最初想象的方式来做这件事的方法——如果没有别的,那就是为了我的学习(而且它似乎也符合我喜欢的 Django 的设计)。
有没有办法让JsonResponse
上面的子类工作?如果是这样,我做错了什么?