• DRF框架之路由Routers


    对于视图集,我们除了可以自己手动指明请求方式与动作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的路由信息也创建出来。

    该花的钱要花,该吃的饭要吃。
  • 相关阅读:
    jquery 根据 option 的 text 定位选中 option
    Mac 打开任务管理器 关闭程序
    什么是 IaaS、PaaS、SaaS
    网站 A/B Test
    PHP 设计模式之策略模式
    mybatis-plus的使用 ------ 入门
    IEDA和svn上同步及更新代码【我】
    springBoot 项目测试【我】
    Idea检出项目配置【我】
    IDEA常用的风格设置
  • 原文地址:https://www.cnblogs.com/chao666/p/12284494.html
Copyright © 2020-2023  润新知