zoukankan      html  css  js  c++  java
  • 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

    测试

  • 相关阅读:
    基于flask的web微信
    Scrapy框架
    python爬虫之Selenium
    python爬虫之request and BeautifulSoup
    CMDB的四种模式
    Django之CURD插件2
    Django之CURD插件
    在代码中使用Autolayout – intrinsicContentSize和Content Hugging Priority
    iOS事件传递&响应者链条
    CAEmitterLayer 粒子发射Layer的相关属性
  • 原文地址:https://www.cnblogs.com/wtil/p/14984220.html
Copyright © 2011-2022 走看看