路由元件與檢視集中附加action的宣告
阿新 • • 發佈:2020-11-29
一 路由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根檢視,返回一個包含所有列表檢視的超連結響應資料。