路由组件
-
自动生成路由
-
action装饰器的使用
路由Routers
对于视图集ViewSet,我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息。
-
REST framework提供了两个router:
分别是 simpleRouter 和 DefaultRouter
自动生成路由
-
自动生成路由的写法
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
此后可以自动创建路由