代码之家  ›  专栏  ›  技术社区  ›  Andriy Drozdyuk Pickels

模拟远程API或扩展现有的Django模型

  •  1
  • Andriy Drozdyuk Pickels  · 技术社区  · 14 年前

    我正在为一个休息的Web服务设计一个客户机。

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

    例如,如果API公开了以下资源:

    • 汽车清单
    • 汽车详图
    • 汽车搜索
    • 经销商总结

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

    1. 试着和姜戈的模型争论一下,模型要模仿它的本土化的感觉。所以我可以尝试让一些名为car的类具有car.objects.all()等方法。
      这种对汽车搜索资源的分解。
    2. 使用自定义方法实现数据访问层类,如:

      • GETA()
      • 汽车。(ID)
      • carsearch.search(“blah”)。

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

    有人遇到过类似的问题吗?可能使用一些外部API(即Twitter?)

    欢迎任何建议。

    附言:请告诉我问题的某一部分是否令人困惑,因为我很难准确地表达出来。

    1 回复  |  直到 14 年前
        1
  •  0
  •   user85461    14 年前

    这看起来是 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(...)