首页 > 解决方案 > Django 休息框架网址

问题描述

我正在用rest框架构建一个Django API,我阅读了文档,而DRF只从模型中生成了一个crud(get、post、patch、delete)。现在的交易是我如何使用 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

网址.py

url(r'api/v1/', include(router.urls))

路由器在哪里

router.register(r'model',api.ModelViewSet)

我对此是正确的,还是我需要创建另一个模型视图,自定义代码并将其添加到路由器列表?

标签: pythondjangodjango-rest-framework

解决方案


您可以像以前一样添加自定义操作,但您可能需要@action装饰器将 url 配置为应用于单个对象或多个对象。 @action(detail=True)添加pk到 url,因为它适用于一个对象。

url 是从动作名称生成的,例如

@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


推荐阅读