• 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
    
  • 相关阅读:
    DVWA--SQL Injection(SQL注入)
    DVWA--Insecure CAPTCHA(不安全的验证码)
    DVWA--File Upload(文件上传)+中国菜刀下载及使用
    DWVA--File Inclusion(文件包含)
    DVWA--CSRF(跨站请求伪造)
    DVWA--Command Injection(命令行注入)
    2020.08.06【省选B组】模拟 总结
    2020.08.05【省选B组】模拟 总结
    2020.08.04【省选B组】模拟 总结
    jzoj 5251. 【GDOI2018模拟8.11】决战
  • 原文地址:https://www.cnblogs.com/shannen/p/11394138.html
Copyright © 2020-2023  润新知