2010-05-03 54 views
1

我正在为REST-ful web服务设计客户端。模仿远程API或扩展现有的Django模型

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

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

  • 汽车的名单
  • 车详细
  • 汽车搜索
  • 经销店汇总

到目前为止,我已经想到了采取两种不同的方法:

  1. 试着去争论django的models.Model来模仿它的本地感受。所以我可以尝试获得一些名为Car的类来获取Car.objects.all()等方法。
    这种类型的汽车搜索资源出现故障。
  2. 实现数据访问层类,与像自定义方法:

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

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

有没有人遇到过类似的问题?也许使用一些外部API(即Twitter?)

任何建议是值得欢迎的。 PS:请让我知道问题的某些部分是否令人困惑,因为我无法准确地说出问题。

回答

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(...) 
+0

嗯,但我的模型没有过滤方法,例如。我只能向我的rest-web服务器发出HTTP请求。 – drozzy 2010-05-03 22:54:57

+0

我不认为我理解。诚然,模型缺少过滤器方法 - 这就是管理器(“Car.objects”)的作用。如果你想处理一个HTTP请求,那会通过一个视图发生。该视图将处理请求并呼叫经理。 – user85461 2010-05-03 23:00:00