簡體   English   中英

Django構建一個Restful API

[英]Django Building A Restful API

我想構建一個Django Api App,該應用程序可以渲染多種數據。 例如看一下我的代碼:

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不同地處理數據。 因此,我使用option=''參數來告訴controller呈現什么內容。 所以我有兩個問題:

  1. 這是正確的方法嗎? 專業人員在構建使用一種模型時呈現不同數據變體的API時,會像這樣嗎?

標題表明您要創建RESTfull API,則應將django-rest-framework與django一起使用,以減輕API設計的RESTfull部分的負擔。

DRF有一個很棒的教程,您應該通讀它,因為在多個響應中具有響應的“專業” api並不是初學者的挑戰。 幸運的是,DRF涵蓋了您的內容,因為它帶有一些所謂的Renderers(默認值)。 Renderer基本上負責呈現數據的格式,例如html,json等。此外,DRF可以處理自定義Renderer,因此您可以輕松地將其擴展為您的需求。

如果您想在整個RESTfull API設計中搶占先機,我建議您閱讀https://apisyouwonthate.com/的書,作者和社區。 作者與社區=優秀人士+這本書可以讓您立即掌握最新知識(我與作者沒有任何隸屬關系,只是認為這本書對於REST入門非常有用)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM