drf——路由组件

路由组件

  • 自动生成路由

  • action装饰器的使用

路由Routers

对于视图集ViewSet,我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息。

  • REST framework提供了两个router:

    分别是 simpleRouterDefaultRouter

自动生成路由

  • 自动生成路由的写法

    1.导入模块
    	from rest_framework.routers import SimpleRouter, DefaultRouter
    2. 实例化得到对象
    	router = SimpleRouter()
    3. 注册路由(可注册多个)  
    	router.register('books',views.BookView,'books')
        第一个参数:路径 第二个参数:视图类 第三个参数:别名,可以不写
        
    4.加入到urlpatterns中(有两种方式)
    	方式1:
        	把自动生成的路由添加到urlpatterns中
            urlpatterns += router.urls
        方式2:
        	导入模块,使用include添加
            path('', include(router.urls)),
    
  • 自动生成路由的映射关系

    自动生成的路由映射关系其实已经定死了
    	/books/--->get--->list
        /books/--->post--->create
        /books/1--->get--->retrieve
        /books/1--->put--->update
        /books/1--->delete--->destroy
    
  • 注意事项

    1.以后写的视图类不需要写action装饰器的话,视图类中必须要有list,destroy,retrieve,create,update方法之一

    ​ 即 必须是 5个视图扩展类之一+GenericAPIView 或 9个视图子类 或 ModelViewSet

    2.SimpleRouter和DefaultRouter的区别

    ​ DefaultRouter比SimpleRouter多一个根路径,显示所有注册过的路由

action装饰器的使用

在视图集中,如果想要让Router自动帮助我们为自定义的动作生成路由信息,需要使用rest_framework.decorators.action装饰器做映射

以action装饰器装饰的方法名会作为action动作名,与list、retrieve等同。

  • action装饰器可以接收的参数

    methods:支持的请求方式,列表传递
    
    detail:	声明该action 的路径是否是单一资源
    	True的路径格式是  xxx/<pk>/action方法名/, False的路径格式是  xxx/action方法名/ 
        
    url_path:控制生成的 /xxx/后的路径是什么
    	如果不写,默认以方法名命名   /xxx/action方法名/,一般跟函数名同名即可
        
    url_name: 别名,用于反向解析
        
    
  • 举例

    @action(methods=['GET','POST'], detail=True, url_path='login')
    def login(self, request,pk):
        pass
    

    此后可以自动创建路由

posted @   Nirvana*  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示