drf自动生成路由的方法

drf自动生成路由一共分为五个步骤,导入路由类,实例化得到对象,注册路由,添加前缀,将自动生成的路由添加到urlpatterns中。

# 导入路由类
from rest_framework.routers import SimpleRouter, DefaultRouter

# 实例化得到对象
router = SimpleRouter()

# 册路由
router.register('books', views.BookView)

# 把自动生成的路径加入到urlpatterns
(1) 方案1
    urlpatterns = [
        path('api/v1/', include(router.urls))
    ]
(2) 方案2
    urlpatterns+=router.urls

------------------------------自动生成的路由的样式------------------------------
path('books/', views.BookView.as_view({'get': 'list', 'post': 'create'})),
path('books/<int:pk>', views.BookView.as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})),
  • 重点强调
继承哪ViewSetMixin+9个视图字类的视图类才能用自动生成路由
  • action装饰器

    给自动生成路由的视图类再定制一些路由,使用方法如下

方法一:
    # api/v1/books/send_email/
    @action(methods=['GET','POST'], detail=False,url_path='mail')
    def sen_email(self, request, *args, **kwargs):
        print(args)
        print(kwargs)
        return APIResponse(msg='发送成功')
    
    # api/v1/books/mail/
     @action(methods=['GET','POST'], detail=False,url_path='mail') # url_path的作用是起别名
    
方法二:
    # api/v1/books/10/send_email/
    @action(methods=['GET'], detail=True)  # 针对某个对象进行操作就采用datail=True的方式,不是就为False的方式
    def sen_email(self, request, *args, **kwargs):
        # pk=10
        print(args)  # ()
        print(kwargs)  # {'pk':'10'}
        return APIResponse(msg='发送成功')
posted @ 2022-03-30 13:05  recordlife  阅读(126)  评论(0编辑  收藏  举报