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.
しかし、私がそれを持っているとき、私はウェブページを見るときに標準を取得します. またself
、 への内部呼び出しの最初の引数として、__init__
(content
およびcontent_type
それぞれ) という名前の引数を使用して、および名前付きの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(...)
しかし、可能であれば、最初に想像した方法でこれを行う方法を学びたいと思います-それ以外の場合は、私の学習のために.
上記のようなサブクラスを機能させる方法はありJsonResponse
ますか? もしそうなら、私は何を間違っていますか?