【发布时间】:2018-07-28 10:50:45
【问题描述】:
我写了一个简单的 json api,我使用一个基类,我主要为每个模型类写一个 api 视图。我想要的是将少量视图的输出合并到一个 url 端点中,并使用尽可能少的附加代码。
代码:
# base class
class JsonView(View):
def get(self, request):
return JsonResponse(self.get_json())
def get_json(self):
return {}
class DerivedView(JsonView):
param = None
def get_json(self):
# .. use param..
return {'data': []}
urls.py:
url('/endpoint1', DerivedView.as_view(param=1))
url('/endpoint2', DerivedView2.as_view())
# What I want:
url('/combined', combine_json_views({
'output1': DerivedView.as_view(param=1),
'output2': DerivedView2.as_view()
}))
所以/combined 会给我以下 json 响应:
{'output1': {'data': []}, 'output2': output of DerivedView2}
这就是 combine_json_views 的实现方式:
def combine_json_views(views_dict):
d = {}
for key, view in views_dict.items():
d[key] = view() # The problem is here
return json.dumps(d)
问题是调用view() 给了我编码的json,所以再次调用json.dumps 会给出无效的json。我可以打电话给json.loads(view()),但是解码我刚刚编码的 json 看起来很糟糕。
如何在此处修改代码(可能是更好的基类),同时保持其优雅和简短?无需添加太多代码。有没有办法访问用于构造JsonResponse的数据(dict)?
【问题讨论】:
标签: python json django api views