• restframework视图集的和自动生成路由


    视图集的作用

    当一个模型对应多个操作,例如获取单条学生数据和获取所有学生数据。
        如果不使用视图集使用普通视图一个get请求是无法对应多个函数的所以我们需要写两个视图类,比较麻烦。
        如果我们使用视图集的时候我们可以创建多条路由用过方法映射的方式实现我们的需求。
    看下面例子!

    手动创建路由方法

    视图部分

    from rest_framework.viewsets import GenericViewSet, ViewSetMixin
    from rest_framework.response import Response
    
    
    # 使用视图集编写
    class ViewSetTest(GenericViewSet):
    
        def getone(self, request, pk, *args, **kwargs):
            return Response(f'获取一条PK为{pk}的信息')
    
        def getall(self, request, *args, **kwargs):
            return Response('获取所有信息')

    路由部分

    # 手动编写路由的方式
    from app01.views import ViewSetTest
    
    urlpatterns = [
        # 填写method和方法的对应关机
        path('all', ViewSetTest.as_view({'get': 'getall'})),
        re_path('one/(?P<pk>d+)', ViewSetTest.as_view({'get': 'getone'}))
    ]

    测试

    自动创建路由方式

    视图部分

    from rest_framework.viewsets import GenericViewSet, ViewSetMixin
    from rest_framework.response import Response
    from rest_framework.decorators import action
    
    
    # 使用视图集编写
    class ViewSetTest(GenericViewSet):
        """
        当detail设置为True的时候
        会自动生成类似re_path('one/(?P<pk>d+)', ViewSetTest.as_view({'get': 'getone'}))的路由
        也就是带id的路由,名字必须叫pk
        """
    
        @action(methods=['get'], detail=True)
        def getone(self, request, pk, *args, **kwargs):
            print(pk)
            return Response(f'获取一条PK为{pk}的信息')
    
        @action(methods=['get'], detail=False)
        def getall(self, request, *args, **kwargs):
            return Response('获取所有信息')

    路由部分

    # 自动创建路由
    from rest_framework.routers import SimpleRouter
    from app01.views import ViewSetTest
    
    router = SimpleRouter()
    router.register('test', ViewSetTest, basename='test')
    urlpatterns += router.urls

    测试

  • 相关阅读:
    Java实现 LeetCode 30 串联所有单词的子串
    Java实现 LeetCode 29 两数相除
    Java实现 LeetCode 29 两数相除
    Java实现 LeetCode 29 两数相除
    Java实现 LeetCode 28 实现strStr()
    Java实现 LeetCode 28 实现strStr()
    Java实现 LeetCode 28 实现strStr()
    Java实现 LeetCode 27 移除元素
    Java实现 LeetCode 27 移除元素
    字符编码终极笔记:ASCII、Unicode、UTF-8、UTF-16、UCS、BOM、Endian
  • 原文地址:https://www.cnblogs.com/wtil/p/14984220.html
Copyright © 2020-2023  润新知