zoukankan      html  css  js  c++  java
  • Django-11-自动生成routers路由、自定义action

    1、自动生成路由

    from rest_framework import routers

    # 1、创建路由对象
    # a.DefaultRouter与SimpleRouter功能类似,不过会自动添加一个根路由(作为获取当前数据的入口)
    router = routers.SimpleRouter()
    # router = routers.DefaultRouter()
    
    # 2、注册路由
    # a.第一个参数为路由前缀
    # b.第二个参数为视图集
    # c.使用视图集中的路由机制,只会为特定的action自动生成路由条件
    # 特定的action:retrieve、update、list、create等
    router.register(r'projects', views.ProjectViewSet)

    urlpatterns = [  ]
    # 3、合并路径条目 urlpatterns += router.urls

    自定义的action,不会自动生成路由条目

    1、可以手动在urlpatterns添加路由映射

    2、添加action装饰器(见下方2)

    2、自定义action

    from rest_framework.decorators import action

    a.如果需要使用视图集中的路由机制来为自定义的action,自动生成路由条目,那么需要使用action

    b.methods参数默认为get方法,可以在列表中指定多个请求方法

    c.detail指定是否需要接收模型主键值,如果无需接收主键值,那么需要设置detail=False,否则需要设置detail=True

    d.url_path指定生成的路由条目路径名,默认为自定义action方法名称

    e.url_name指定生成的路由名称后缀,默认为自定义action方法名称

    @action(methods=['get'], detail=False, url_path='pp', url_name='nn')

        @action(methods=['get'], detail=False)
        def names(self, request):
            queryset = self.get_queryset()
            names_list = [{'id': project.id, 'name': project.name} for project in queryset]
            return Response(names_list, status=status.HTTP_200_OK)
    
        @action(detail=True)
        def interfaces(self, request, *args, **kwargs):
            project = self.get_object()
            interface_qs = project.interfaces.all()
            interfaces_list = [{'id': interface.id, 'name': interface.name} for interface in interface_qs]
            return Response(interfaces_list, status=status.HTTP_200_OK)

     

  • 相关阅读:
    2019 Java 第四周总结
    2019第三周总结
    Java 第二周总结
    2019春第十二周作业
    Day3
    Day3
    Day3
    Day3
    Day2
    Day2
  • 原文地址:https://www.cnblogs.com/erchun/p/14490943.html
Copyright © 2011-2022 走看看