2010-05-03 3 views
1

REST-ful 웹 서비스 용 클라이언트를 설계하는 중입니다.원격 API를 모방하거나 기존 장고 모델을 확장하십시오

내 장고 응용 프로그램에서 로컬로 원격 리소스를 표시하는 가장 좋은 방법은 무엇입니까? 예를 들어

API가 같은 자원을 노출하는 경우 : 자동차의

  • 목록을
  • 자동차 상세
  • 는 자동차 검색
  • 은 대리점 요약

지금까지 나는 생각했다

  • 두 가지 다른 접근 방법 :

    1. 장고의 모델을 논쟁 해보세요. 원래의 느낌을 모방 한 모델. 그래서 저는 Car라는 객체를 Car.objects.all()과 같은 메소드를 갖도록하려고 시도 할 수 있습니다.
      이런 종류의 자동차 검색 리소스에 세분화.
    2. 같은 사용자 정의 방법과, 데이터 액세스 계층 클래스를 구현 :

      • Car.get_all()
      • Car.get (ID)
      • CarSearch.search ("어쩌구")

      그래서 몇 가지 맞춤 찾는 수업을 작성합니다.

    비슷한 문제가있는 사람이 있습니까? 아마도 외부 API (즉, 트위터)와 협력 할 것입니다.

    추신 : 정확한 용어를 기재하는 데 어려움이 있으므로 질문의 일부가 혼란 스럽다면 알려 주시기 바랍니다.

  • 답변

    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

    흠,하지만 내 모델에는 필터 방법이 없습니다. 나머지 웹 서버에만 HTTP 요청을 보낼 수 있습니다. – drozzy

    +0

    나는 이해할 것 같지 않습니다. 사실, 모델에는 필터 메소드가 없습니다. 이것이 관리자 ("Car.objects'')가 갖는 것입니다. HTTP 요청을 처리하려는 경우보기를 통해 발생합니다. 뷰는 요청을 처리하고 관리자에게 전화를 겁니다. – user85461

    관련 문제