2017-09-25 6 views
0

複数のデータをレンダリングできるDjango Api Appを構築したいと考えています。例えば、私のコードを見てみましょう:あなたが見ることができるようにDjango Building A Restful API

urlpatterns = [ 
    url(r'nav-func$', views.FundNavApi.as_view(option='nav_func')), 
    url(r'fund_nav/(?P<fund_id>[0-9]+)$', views.FundNavApi.as_view(option='fund_nav')) 
] 

Views.py

class FundNavApi(APIView): 
    option = 'default' 
    model_class = NAV 
    fund_id = None 

    def get(self, request, format=None): 
     if self.option == 'nav_func': 
      res = self.nav_func 
      print(res) 
     elif self.option == 'fund_nav': 
      print(self.kwargs['fund_id']) 
     return Response("Hi") 

    @staticmethod 
    def nav_func(): 
     querysets = NAV.objects.filter(fund__account_class=0, transmission=3).values(
     'valuation_period_end_date').annotate(
     total_nav=Sum(F('outstanding_shares_par') * F('nav'))).order_by('valuation_period_end_date') 

     df = read_frame(querysets, coerce_float=True) 
     df.loc[:, 'valuation_period_end_date'] = pd.to_datetime(df.valuation_period_end_date) 
     df.loc[:, 'timestamp'] = df.valuation_period_end_date.astype(np.int64) // 10 ** 6 
     df.loc[:, 'total_nav'] = df.total_nav 
     df = df.round(0) 
     print(df[['timestamp', 'total_nav']].values.tolist()) 
     return df[['timestamp', 'total_nav']].values.tolist() 

、私は同じmodelを使用しますが、異なるurlに基づいてデータを操作します。したがって、controllerに何をレンダリングするかを伝える方法としてoption=''パラメータを使用します。だから私は2つの質問があります:

  1. 正しいアプローチですか?これは、1つのタイプのモデルを使用している間にさまざまなデータをレンダリングするAPIを構築するという点で、プロフェッショナルが行うことですか?

答えて

0

のSincあなたのタイトルはあなたがpbly少しを設計あなたのAPIのRESTfull部分を容易にするためにジャンゴとジャンゴ・休息・フレームワークを使用する必要がありますRESTfull APIを作成したいを示しています。

DRFには素晴らしいチュートリアルがあります。複数回答の回答があるプロフェッショナルなAPIは初心者の挑戦ではないため、DRFのチュートリアルはうまくいきます。 ありがたいことにDRFには、レンダラーと呼ばれる一部のデフラールが付属しています。レンダラーは基本的に、データが表示されるフォーマットを担当します。 html、jsonなどがあります。さらに、DRFはカスタムレンダラーを処理できるため、必要に応じてeasly拡張することができます。

RESTfull APIの全体的な設計でヘッドスタートを取得したい場合は、本、著者、コミュニティのうちhttps://apisyouwonthate.com/をお勧めします。著者:&コミュニティ=偉大な人+この本は、あなたがすぐにスピードアップする(私は著者との関係はなく、ちょうどその本がRESTの紹介としては素晴らしいと思う)。