• 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
    
  • 相关阅读:
    黄聪:DEDECMS织梦 真正的随机文章的调用方法
    黄聪:Apache 301重定向中RewriteCond规则参数介绍(转)
    [阅读笔记]fsnotify源码阅读
    [阅读笔记]Go语言并发之美
    NUMA的取舍
    Web服务器那些招
    PHP执行批量mysql语句
    gotour练习解答
    mysql多个TimeStamp设置
    mysql那些招
  • 原文地址:https://www.cnblogs.com/shannen/p/11394138.html
Copyright © 2020-2023  润新知