2

我有一个 Django 视图,我想重用它而不是复制和粘贴,在执行一些自定义逻辑之前加载和验证。

我正在评估使此视图可重用的三种方法:

  1. 装饰者(不是 Djangoish)
  2. 通用视图方法(调查)
  3. 基于类的通用视图(有点矫枉过正)

你会推荐什么,为什么?

我提供了以下视图的片段:

try:
    data = json.loads(request.body)
except:
    resp = generate_json_response(False, 'validation', 'JSON data cannot be parsed. Please check your data format.')
    return HttpResponse(resp, mimetype="application/json")

# Validation
location = data.get('location', None)
if location:
    {custom logic}

else: 
    # No Location
    resp = generate_json_response(False, 'validation', 'Missing location id')
    return HttpResponse(resp, mimetype="application/json")

resp = generate_json_response(True, None, None)
return HttpResponse(json.dumps(resp), mimetype="application/json")
4

1 回答 1

1

您是否考虑将基于类的通用视图与 mixins 一起使用?像这样的东西:

class JSONResponseMixin(object):
    def render_to_response(self, context):
        return self.get_json_response(json.dumps(context))

    def get_json_response(self, content, **httpresponse_kwargs):
        return http.HttpResponse(content,
                   content_type='application/json',
                   **httpresponse_kwargs)


class MyView(JSONResponseMixin, SomeView(BaseDetail, BaseUpdate etc..)):
    pass

也许为您的目的使用一些 json-rpc 实现会更好。看一看:

http://json-rpc.org/

http://www.jsonrpc.org/specification

http://en.wikipedia.org/wiki/JSON-RPC#Implementations

于 2013-06-21T01:10:32.220 回答