zoukankan      html  css  js  c++  java
  • DRF路由组件

    REST framework提供了两个router

    • SimpleRouter

    • DefaultRouter

     DefaultRouter与SimpleRouter的区别是,DefaultRouter会多附带一个默认的API根视图,返回一个包含所有列表视图的超链接响应数据。

    example1:

    from .views import BookViewSet
    from rest_framework.routers import DefaultRouter
    
    # 实例化DeaultRouter对象
    router = DefaultRouter()
    
    # 注册路由和视图
    router.register(r"book", BookViewSet)
    
    urlpatterns = [
    
    ]
    
    # 在urlpatterns = [ ]中自动生成标签
    urlpatterns += router.urls
    

     example2:

    from .views import BookViewSet
    from rest_framework.routers import DefaultRouter
    
    # 实例化DeaultRouter对象
    router = DefaultRouter()
    
    # 注册路由和视图
    router.register(r"book", BookViewSet)
    
    urlpatterns = [
        ...
        url(r'^', include(router.urls))
    ]
    

     自动生成的路由如下:

    ^book/$    name: book-list
    ^book/{pk}/$   name: book-detail
    

     其中,注册路由及视图的函数

    register(prefix, viewset, base_name)

    • prefix 该视图集的路由前缀
    • viewset 视图集
    • base_name 路由名称的前缀

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

    以action装饰器装饰的方法名会作为action动作名,与list、retrieve等同。

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

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

    from rest_framework.viewsets import ModelViewSet
    from rest_framework.decorators import action
     
    class BookViewSet(ModelViewSet):
        queryset = Book.objects.all()
        serializer_class = BookSerializer
     
        # detail为False 表示路径名格式应该为 book/latest/
        @action(methods=['get'], detail=False)
        def latest(self, request):
            """
            返回最新的图书信息
            """
            ...
     
        # detail为True,表示路径名格式应该为 book/{pk}/read/
        @action(methods=['put'], detail=True)
        def read(self, request, pk):
            """
            修改图书的阅读量数据
            """
            ...
    

     生成的路由:

    ^books/latest/$    name: book-latest
    ^books/{pk}/read/$  name: book-read
    
  • 相关阅读:
    Delete 语句带有子查询的sql优化
    标量子查询SQL改写
    自定义函数导致的sql性能问题
    Oracle 11G RAC For ASM 利用RMAN COPY进行存储迁移
    WPF 如何控制右键菜单ContextMenu的弹出
    将字符串以用二进制流的形式读入XML文件
    WPF 将数据源绑定到TreeView控件出现界面卡死的情况
    WPF如何实现TreeView节点重命名
    Azure一个Cloud Service支持多个公网地址
    Azure上部署Barracuda WAF集群 --- 2
  • 原文地址:https://www.cnblogs.com/shannen/p/11394138.html
Copyright © 2011-2022 走看看