Django构建Restful API

2024-10-04 05:20:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想建立一个djangoapi应用程序,允许我呈现数据的多种变体。例如,看看我的代码:

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'))
]

你知道吗视图.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时所做的,在使用一种类型的模型时呈现不同的数据变体吗?你知道吗

Tags: 数据selfidurldfdateperiodend
1条回答
网友
1楼 · 发布于 2024-10-04 05:20:28

因为您的标题表明您想要创建一个RESTfull api,所以您应该将django rest框架与django结合使用,以稍微简化api设计的RESTfull部分。你知道吗

DRF有一个很好的教程,你应该好好学习,因为一个在多个响应中包含响应的“专业”api不是初学者的挑战。 谢天谢地,DRF已经覆盖了你,因为它附带了一些所谓的渲染器。渲染器主要负责呈现数据的格式,例如html、json等。此外,DRF可以处理自定义渲染器,以便您可以轻松地将其扩展到您的需要。你知道吗

如果您想在RESTfull API的总体设计中获得一个开端,我推荐这本书,作者和https://apisyouwonthate.com/社区。Author&;Community=great guys+这本书很快就能让你了解最新情况(我和作者没有任何关系,只是觉得这本书很适合作为REST的入门)。你知道吗

相关问题 更多 >