zoukankan      html  css  js  c++  java
  • Django-rest-framework(四)router

    在上一节viewsets中,我们提到了route的方式使用,在这一节,我们将仔细介绍drf 的router机制。简单来说,router的作用就是将viewset对象的url映射关系提取出来。

    简单使用

    from rest_framework import routers
    
    router = routers.SimpleRouter()
    router.register(r'users', UserViewSet, basename="user")
    router.register(r'accounts', AccountViewSet)
    # urlpatterns = router.urls
    urlpatterns = [
        url(r'^api/', include((router.urls, 'app_name'))),
    ]
    

    register 用两个参数,

    • prefix route中url的前缀
    • viewset 对应的viewset类
    • basename 创建url的名字,默认是viewset的queryset,所以如果viewset类中没用queryset属性,必须设置basename

    额外的action

    在之前的介绍中,我们知道, viewset里面我们可以通过继承不同的mixins来实现列表,详情,增加,修改,部分修改,删除种不同功能的接口。可是在实际情况中,我们需要的不仅仅是这些,所以,我们需要额外的url来路由。于是引入了action装饰器,我们可以在viewset中添加额外的路由了,使用方法:

    from myapp.permissions import IsAdminOrIsSelf
    from rest_framework.decorators import action
    
    class UserViewSet(ModelViewSet):
        ...
    
        @action(methods=['post'], detail=True, permission_classes=[IsAdminOrIsSelf])
        def set_password(self, request, pk=None):
    
    Note
    在之前旧的版本使用的是detail_route,list_route连个装饰器来添加额外的路由,用来区别url中是否有pk字段。action装饰器则是通过detail字段来区别
    

    使用上面action生成的url是 ^users/{pk}/set_password/$。 如果不想使用方法的名字来做路由,可以在action中指定url_name

    DefaultRouter

    前面我们介绍时使用的是SimpleRouterDefaultRouter与之不同的是,它带了一个api root view,返回了包viewset中包含的所有action的超链接。

    官方文档上还介绍了自定义routers的方法,因为暂时还没用到过,所以对这部分不做介绍

  • 相关阅读:
    iOS企业账号打包发布App到自己服务器上
    DBus 接口
    Ubuntu下安装gazebo
    Ubuntu下添加开机启动脚本
    Ubuntu录屏软件Kazam
    使用ceres编译报错 error: ‘integer_sequence’ is not a member of ‘std‘
    LINUX中查看、添加、删除PATH以及永久添加PATH
    Ubuntu完美解决Github网站打不开问题
    PointNet原理详解
    目标检测算法RCNN,Fast RCNN,Faster RCNN
  • 原文地址:https://www.cnblogs.com/yuzhenjie/p/10361880.html
Copyright © 2011-2022 走看看