DRF,自定义ROUTER类,动态生成路由,禁用drf默认的SimpleRouter七个curd接口路由

现状

最近的项目是用DRF框架实现后端的接口,视图果断使用modelviewset,而DRF默认的两个路由生成类routers.SimpleRouter和DefaultRouter,都会默认生成CURD七个接口的路由,项目不需要这些路由,所以决定自己实现一下Router,很简单,继承SimpleRouter重写类属性routes即可

代码

from rest_framework import routers

class CustomRouter(routers.SimpleRouter):
    """
    自定义的动态路由生成类,用于动态生成viewset中detail=False的接口路由,且不生成DRF原生CURD接口默认生成的路由和detail=True的路由
    配合DRF的ModelViewSet实现CBV的接口
    """
    routes = [
        # Dynamically generated list routes. Generated using
        # @action(detail=False) decorator on methods of the viewset.
        routers.DynamicRoute(
            url=r'^{prefix}/{url_path}{trailing_slash}$',
            name='{basename}-{url_name}',
            detail=False,
            initkwargs={}
        ),
    ]

调用

from rest_framework.viewsets import ModelViewSet
from rest_framework.decorators import action

class TestViewSet(ModelViewSet):
    @action(methods=['post'], detial=False)
    def dev(self, request, *args, **kwargs):
        pass

    @action(methods=['get'], detial=False, url_path='test')
    def testing(self, request, *args, **kwargs):
        pass

# urls.py  # 如下配置,只生成test_view/dev 和test_view/test 两个路由
router = CustomRouter()
router.register(r'test_view', TestViewSet, basename='test_view')
urlpatterns = [] + router.urls
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值