一 路由Routers
對於視圖集ViewSet,我們除了可以自己手動指明請求方式與動作action之間的對應關系外,還可以使用Routers來幫助我們快速實現路由信息。
REST framework提供了兩個router
- SimpleRouter
- DefaultRouter
1.1 使用方法
1) 創建router對象,並注冊視圖集,例如
|
|
register(prefix, viewset, base_name)
- prefix 該視圖集的路由前綴
- viewset 視圖集
- base_name 路由別名的前綴
如上述代碼會形成的路由如下:
|
|
2)添加路由數據
可以有兩種方式:
|
|
或
|
|
1.2 代碼演示
使用路由類給視圖集生成了路由地址
|
|
路由代碼:
|
|
上面的代碼就成功生成了路由地址[增/刪/改/查一條/查多條的功能],但是不會自動我們在視圖集自定義方法的路由。
所以我們如果也要給自定義方法生成路由,則需要進行action動作的聲明。
1.2 視圖集中附加action的聲明
在視圖集中,如果想要讓Router自動幫助我們為自定義的動作生成路由信息,需要使用rest_framework.decorators.action
裝飾器。
以action裝飾器裝飾的方法名會作為action動作名,與list、retrieve等同。
action裝飾器可以接收兩個參數:
-
methods: 聲明該action對應的請求方式,列表傳遞
-
detail
: 聲明該action的路徑是否與單一資源對應,及是否是
1
xxx/<pk>/action方法名/
- True 表示路徑格式是
xxx/<pk>/action方法名/
- False 表示路徑格式是
xxx/action方法名/
- True 表示路徑格式是
舉例:
|
|
由路由器自動為此視圖集自定義action方法形成的路由會是如下內容:
|
|
1.3 路由router形成URL的方式
1) SimpleRouter
2)DefaultRouter
DefaultRouter與SimpleRouter的區別是,DefaultRouter會多附帶一個默認的API根視圖,返回一個包含所有列表視圖的超鏈接響應數據。