码迷,mamicode.com
首页 > 其他好文 > 详细

DRF框架之路由Routers

时间:2020-02-08 19:40:26      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:get   请求方式   turn   model   efault   自动   路由表   code   router   

对于视图集,我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息。

REST framework提供了两个router

  • SimpleRouter
  • DefaultRouter

1. 使用方法:

1. 创建路由对象

# 定义一个路由器对象
router = DefaultRouter()

2. 注册路由信息

# 将序列化器的视图进行注册
router.register(r路由前缀, 视图集, basename=‘命名空间‘)

3. 将路由信息保存到urlpatterns中

# 将注册后的路由信息添加到路由表中
urlpatterns += router.urls

当我们定义好Routers后,DRF框架会使用Routers为我们自动创建好路由信息,但是自定义的action并不会自动创建路由信息。

2. 为自定义action自动创建路由信息

在视图集中,如果想要让Router自动帮助我们为自定义的动作生成路由信息,需要使用rest_framework.decorators.action装饰器。

action装饰器可以接收两个参数:

  • methods: 声明该action对应的请求方式,列表传递
  • detail: 声明该action的路径是否与单一资源对应
    • True 表示路径格式是xxx/<pk>/action方法名/
    • False 表示路径格式是xxx/action方法名/

案例代码:

class BookInfoViewSet(ModelViewSet):
    """增删改查图书信息"""

    # 指定查询集
    queryset = BookInfo.objects.all()
    # 指定序列化器
    serializer_class = BookInfoModelSerializer

    # detail为False 表示路径名格式应该为 books/latest/,其中不包含pk
    @action(methods=[get], detail=False)
    def latest(self, request):
        """
        自定义action动作
        返回最后一条图书信息
        """
        book = BookInfo.objects.latest(id)
        serializer = self.get_serializer(book)
        return Response(serializer.data)

这样,DRF框架就会使用路由Routers为我们自动的将自定义的action的路由信息也创建出来。

DRF框架之路由Routers

标签:get   请求方式   turn   model   efault   自动   路由表   code   router   

原文地址:https://www.cnblogs.com/chao666/p/12284494.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!