【愚公系列】2022年04月 Python教學課程 71-DRF框架之內置路由

      網友投稿 746 2025-04-04

      一、路由

      對于視圖集ViewSet,我們除了可以自己手動指明請求方式與視圖方法[官方文檔中也叫action,動作]之間的對應關系外,還可以使用Routers來幫助我們自動生成路由信息。

      【愚公系列】2022年04月 Python教學課程 71-DRF框架之內置路由

      REST framework提供了兩個router

      SimpleRouter

      DefaultRouter

      1.SimpleRouter

      1.1 基本使用

      from rest_framework import routers router = routers.SimpleRouter() router.register(r'users', UserViewSet) router.register(r'accounts', AccountViewSet) urlpatterns = router.urls

      該方法有兩個必需的參數:register()

      prefix- 用于這組路由的 URL 前綴。

      viewset- 視圖集類。

      (可選)您還可以指定一個附加參數:

      basename- 用于所創建的 URL名稱的基礎。如果未設置,則將根據視圖集的屬性(如果有)自動生成基名。請注意,如果視圖集不包含屬性,則必須在注冊視圖集時進行設置。

      上面的示例將生成以下 URL 模式:

      網址模式: 名稱:^users/$‘user-list’

      網址模式: 名稱:^users/{pk}/$‘user-detail’

      網址模式: 名稱:^accounts/$‘account-list’

      網址模式: 名稱:^accounts/{pk}/$‘account-detail’

      1.2 合并使用

      router = routers.SimpleRouter() router.register(r'users', UserViewSet) router.register(r'accounts', AccountViewSet) urlpatterns = [ path('forgot-password/', ForgotPasswordFormView.as_view()), ] urlpatterns += router.urls

      urlpatterns = [ path('forgot-password', ForgotPasswordFormView.as_view()), path('', include(router.urls)), ]

      urlpatterns = [ path('forgot-password/', ForgotPasswordFormView.as_view()), path('api/', include((router.urls, 'app_name'), namespace='instance_name')), ]

      1.3 額外操作的路由

      視圖集可以通過使用裝飾器修飾方法來標記用于布線的額外操作。這些額外的操作將包含在生成的路由中。例如,給定類上的方法:action()

      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): ...

      將生成以下路由:

      網址模式:^users/{pk}/set_password/$

      網址名稱:'user-set-password'

      默認情況下,URL 模式基于方法名稱,URL 名稱是方法名稱和帶連字符的方法名稱的組合。如果不想為這兩個值中的任何一個使用默認值,則可以改為向裝飾器提供 and 參數。

      例如,如果要將自定義操作的 URL 更改為 ,則可以編寫:^users/{pk}/change-password/$

      from myapp.permissions import IsAdminOrIsSelf from rest_framework.decorators import action class UserViewSet(ModelViewSet): ... @action(methods=['post'], detail=True, permission_classes=[IsAdminOrIsSelf], url_path='change-password', url_name='change_password') def set_password(self, request, pk=None): ...

      上面的示例現在將生成以下 URL 模式:

      網址路徑:^users/{pk}/change-password/$

      網址名稱:'user-change_password'

      注意點:

      默認情況下,創建的 URL 會附加尾部斜杠??梢酝ㄟ^在實例化路由器時將參數設置為來修改此行為。例如:

      router = SimpleRouter(trailing_slash=False)

      尾隨斜杠在 Django 中是約定俗成的,但在其他一些框架(如 Rails)中默認不使用。你選擇使用哪種風格很大程度上取決于你的偏好,盡管一些javaScript框架可能會期望特定的路由風格。

      路由器將匹配包含除斜杠和句點字符之外的任何字符的查找值。對于限制性更強(或寬松)的查找模式,請在視圖集上設置屬性。例如,可以將查找限制為有效的 UUID:

      class MyModelViewSet(mixins.RetrieveModelMixin, viewsets.GenericViewSet): lookup_field = 'my_model_id' lookup_value_regex = '[0-9a-f]{32}'

      2.DefaultRouter

      此路由器與上述路由器類似,但還包含默認 API 根視圖,該視圖返回包含指向所有列表視圖的超鏈接的響應。它還為可選樣式格式后綴生成路由。

      from rest_framework import routers router = routers.DefaultRouter() router.register(r'users', UserViewSet) router.register(r'accounts', AccountViewSet) urlpatterns = router.urls

      與 URL 路由上的尾部斜杠一樣,可以通過在實例化路由器時將參數設置為 來刪除。

      router = DefaultRouter(trailing_slash=False)

      5G教育 NAT Python

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:不要按做的順序,自己點哪個退出哪個,怎么弄
      下一篇:Python大規模機器學習》— 2.2.5 關注實例排序
      相關文章
      亚洲精品美女久久久久| 亚洲免费视频在线观看| 亚洲a级在线观看| 精品亚洲成a人片在线观看 | 亚洲国产精品嫩草影院在线观看| 国产成人精品日本亚洲专区 | 亚洲视频免费一区| 亚洲美女中文字幕| 亚洲欧洲国产视频| 亚洲乱码一区av春药高潮| 亚洲乱码在线播放| 亚洲中文字幕无码亚洲成A人片| 亚洲精品人成网在线播放影院| 日韩亚洲国产高清免费视频| 亚洲中文字幕无码中文| 亚洲av午夜国产精品无码中文字| 成人精品国产亚洲欧洲| 亚洲国产精品日韩专区AV| 国产成人亚洲影院在线观看| 亚洲中文字幕无码久久2017 | 在线观看亚洲AV日韩AV| 亚洲欧美国产国产一区二区三区 | 亚洲第一第二第三第四第五第六| 亚洲AV色无码乱码在线观看| 亚洲?V乱码久久精品蜜桃 | 久久久久久A亚洲欧洲AV冫| 亚洲中文字幕在线乱码| 亚洲AV无码一区二区二三区入口 | 亚洲美女激情视频| 久久久国产亚洲精品| 亚洲日韩精品国产一区二区三区| 亚洲av日韩综合一区二区三区| 亚洲第一视频在线观看免费| 国产亚洲精品免费视频播放| 亚洲av伊人久久综合密臀性色| 亚洲精品在线网站| 亚洲精品国产av成拍色拍| 亚洲精品无码专区2| 亚洲永久精品ww47| 久久亚洲精品成人av无码网站| 亚洲国产美女在线观看|