我想构建一个允许我渲染多种数据变体的Django 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
以不同方式操纵数据。因此,我使用option=''
参数作为告诉controller
要渲染的内容的方法。所以我有两个问题:
答案 0 :(得分:0)
Sinc你的标题表明你想要创建一个RESTfull api,你应该使用django-rest-framework和django来简化你的api设计中的RESTfull部分。
DRF有一个很好的教程,你应该通过,因为一个专业的&#39;具有多个响应中的响应的api不是初学者挑战。 值得庆幸的是DRF让你满意,因为它带有一些所谓的渲染器。渲染器基本上负责您的数据呈现的格式,例如html,json等。此外,DRF可以处理自定义渲染器,因此您可以轻松地将其扩展到您的需求。
如果您想在整体RESTfull API设计方面取得进展,我推荐https://apisyouwonthate.com/的书籍,作者和社区。作者&amp;社区=伟大的家伙+这本书让你快速上手(我与作者没有任何关系,只是认为这本书非常适合介绍REST)。