Имитация удаленного API или расширение существующей модели Django - PullRequest
1 голос
/ 03 мая 2010

Я нахожусь в процессе разработки клиента для веб-сервиса REST-ful.

Как лучше всего представлять локально удаленный ресурс в моем приложении django?

Например, если API предоставляет такие ресурсы, как:

  • Список автомобилей
  • Деталь автомобиля
  • Поиск автомобиля
  • Краткая информация о дилере

До сих пор я думал о двух разных подходах:

  1. Попытайтесь спорить с моделями Джанго. Моделируйте, чтобы имитировать нативное ощущение этого. Поэтому я мог бы попытаться получить некоторый класс с именем Car, чтобы иметь такие методы, как Car.objects.all () и тому подобное.
    Этот вид разбивает ресурсы на поиск автомобилей.
  2. Реализация класса уровня доступа к данным с помощью пользовательских методов, таких как:

    • Car.get_all ()
    • Car.get (ID)
    • CarSearch.search ( "л")

    Итак, я буду создавать несколько пользовательских классов.

Кто-нибудь сталкивался с подобной проблемой? Возможно, работа с некоторыми внешними API (например, Twitter?)

Любой совет приветствуется.

PS: Пожалуйста, дайте мне знать, если какая-то часть вопроса сбивает с толку, так как у меня были проблемы с точным выражением.

1 Ответ

0 голосов
/ 03 мая 2010

Это выглядит как идеальное место для пользовательского менеджера . Менеджеры являются предпочтительным методом для функциональности на уровне таблицы, в отличие от функциональности на уровне строки, принадлежащей классу модели. По сути, вы бы определили менеджера следующим образом:

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(...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...