Django:编写通用视图选项

时间:2013-06-20 21:32:26

标签: django django-views django-generic-views

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

我正在评估三种方法来使这个视图可重用:

  1. 装饰师(不是Djangoish)
  2. 通用视图方法(调查)
  3. 基于类的通用视图(有点过分杀人)
  4. 你会推荐什么?为什么?

    我提供了以下视图的摘要:

    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")
    

1 个答案:

答案 0 :(得分: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