DRF-路由

用法

这是一个简单的 URL conf 示例,它使用SimpleRouter.

from rest_framework import routers

router = routers.SimpleRouter()
router.register(r'users',UserViewSet)
router.register(r'accounts',AccountViewSet)
urlpatterns = router.urls

该方法有两个强制参数register()

  • prefix- 用于这组路由的 URL 前缀。
  • viewset- 视图集类。

或者,您还可以指定一个附加参数:

  • basename- 用于创建的 URL 名称的基础。如果未设置 basename 将根据querysetviewset 的属性自动生成(如果有的话)。请注意,如果视图集不包含queryset属性,则必须basename在注册视图集时进行设置。

上面的示例将生成以下 URL 模式:

  • URL 模式:^users/$ 名称:'user-list'
  • URL 模式:^users/{pk}/$ 名称:'user-detail'
  • URL 模式:^accounts/$ 名称:'account-list'
  • URL 模式:^accounts/{pk}/$ 名称:'account-detail'

添加路由

urlpatterns += router.urls
或
path('', include(router.urls)),

额外操作的路由

视图集可以通过使用装饰器装饰方法来标记路由的额外操作@action。这些额外的操作将包含在生成的路由中。例如,给定类set_password上的方法UserViewSet

from myapp.permissions importIsAdminOrIsSelf
from rest_framework.decorators import action

classUserViewSet(ModelViewSet):
    ...

    @action(methods=['post'], detail=True, permission_classes=[IsAdminOrIsSelf])
    def set_password(self, request, pk=None):
        ...

将生成以下路线:

  • 网址格式:^users/{pk}/set_password/$
  • 网址名称:'user-set-password'

默认情况下,URL 模式基于方法名称,并且 URL 名称是ViewSet.basename和带连字符的方法名称的组合。如果您不想对这些值中的任何一个使用默认值,则可以改为将url_pathandurl_name参数提供给@action装饰器。

例如,如果您想将自定义操作的 URL 更改为^users/{pk}/change-password/$,您可以编写:

from myapp.permissions importIsAdminOrIsSelf
from rest_framework.decorators import action

classUserViewSet(ModelViewSet):
    ...

    @action(methods=['post'], detail=True, permission_classes=[IsAdminOrIsSelf],
            url_path='change-password', url_name='change_password')
    def set_password(self, request, pk=None):
        ...

上面的示例现在将生成以下 URL 模式:

  • 网址路径:^users/{pk}/change-password/$
  • 网址名称:'user-change_password'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值