我正在使用rest框架构建Django API,阅读文档,DRF只能从模型中提取(获取,发布,修补,删除)。现在达成的协议是我如何使用DRF进行自定义操作。
示例:
api/v1/model/custom_action
代码:
class DistrictViewSet(viewsets.ModelViewSet):
queryset = District.objects.all()
serializer_class = DistrictSerializer
def custom_action(request, param):
# do many actions and return as Json Object
urls.py
url(r'api/v1/', include(router.urls))
路由器在哪里
router.register(r'model',api.ModelViewSet)
我对此是正确的,还是需要创建另一个模型视图,自定义代码并将其添加到路由器列表中?
答案 0 :(得分:2)
您可以像完成操作一样添加自定义操作,但是您可能需要@action
装饰器来配置将URL应用于单个对象或多个对象。
@action(detail=True)
将pk
添加到网址中,因为它适用于一个对象。
网址是根据操作名称生成的,例如
@action(detail=True)
def custom_action(self):
pass
会产生网址^<app_name>/{pk}/custom_action/$
您可能会发现这很有用: https://www.django-rest-framework.org/api-guide/viewsets/#marking-extra-actions-for-routing