模仿远程API或扩展现有的django模型

时间:2010-05-03 15:54:41

标签: django api architecture rest

我正在为REST-ful网络服务设计客户端。

在我的django应用程序中本地表示远程资源的最佳方法是什么?

例如,如果API公开资源,例如:

  • 汽车清单
  • 汽车明细
  • 汽车搜索
  • 经销商摘要

到目前为止,我已经考虑过两种不同的方法:

  1. 尝试争论django的模型。模型模仿它的原生感觉。所以我可以尝试让一些名为Car的类具有Car.objects.all()之类的方法。
    这种打击汽车搜索资源。
  2. 使用以下自定义方法实现数据访问层类:

    • Car.get_all()
    • Car.get(ID)
    • CarSearch.search( “等等”)

    所以我将创建一些自定义的类。

  3. 有没有人遇到过类似的问题?也许正在使用一些外部API(即推特?)

    欢迎任何建议。

    PS:请告诉我一些问题是否令人困惑,因为我无法准确地说出来。

1 个答案:

答案 0 :(得分:0)

这看起来像是custom manager的完美之地。管理器是“表级”功能的首选方法,而不是属于模型类的“行级”功能。基本上,你要定义一个这样的经理:

class CarAPIManager(models.Manager):
    def get_detail(self, id):
        return self.get(id=id)

    def search(self, term):
        return self.filter(model_name__icontains=term)

这可以用作默认管理器 - 例如,在模型定义中:

class Car(models.Model):
    ...

    objects = CarAPIManager()

# usage
>>> Car.objects.search(...)

或者你可以把它作为一个额外的经理,作为班级的财产:

class Car(models.Model):
    ...

    api = CarAPIManager()

# usage
>>> Car.api.search(...)