美文网首页
23、Django_rest framework_自定义acti

23、Django_rest framework_自定义acti

作者: 猪儿打滚 | 来源:发表于2020-03-14 17:15 被阅读0次

前言

上一节的action都是常用方法默认对应的,但是我们在实际应用中,往往需要自定义action

DRF@action装饰器

  • @action():自定义action
    • 参数1:methods:声明该action对应的请求方式,默认GET
    • 参数2:detail:声明该action是否和单一资源对应(传递pk),以及是否是xxx/<pk>/action方法名/格式的请求路径
      • True:表示请求路径是xxx/<pk>/action方法名/格式
      • False:表示请求路径是xxx/action方法名/格式
    • 参数3(少用): url_path:声明该actionurl_path,默认使用该action所装饰的方法的名称
    • 参数4(少用): url_name:声明该actionurl_name,默认使用该action所装饰的方法的名称
场景1、返回所有projcetname

1、新增序列化器,projecst/serializer.py

class ProjectNameSerializer(serializers.ModelSerializer):
    class Meta:
        model = Projects
        fields = ( 'name')

2、自定义actionviews.py

@action(methods=['get'], detail=False)
def names(self, request, *args, **kwargs):
    queryset = self.get_queryset()
    serializer = ProjectNameSerializer(instance=queryset, many=True)
    return Response(serializer.data)

3、添加对应路由:projecst/urls.py

path('project/names/', views.ProjectsViewSet.as_view({
    'get', 'names'  # 对应action所装饰的方法的名称
}))
场景2、查询指定projcet所有的interface

1、新增序列化器,projecst/serializer.py

class InterfacesNameSerializer(serializers.ModelSerializer):
    class Meta:
        model = Interfaces
        fields = ('id', 'name', 'tester')

class InterfacesByProjectIdSerializer(serializers.ModelSerializer):
  # 反向指定,查询projecet时,同时生成从表interface的字段(InterfacesNameSerializer中指定了所生成的字段)
    interfaces_set = InterfacesNameSerializer(read_only=True, many=True)
    class Meta:
        model = Projects
        fields = ('id', 'interfaces_sets')

2、自定义actionviews.py

@action(detail=True)
def interfaces(self, reques, *args, **kwargs):
    instance = self.get_queryset()
    serializer = InterfacesByProjectIdSerializer(instance=instance)
    return Response(serializer.data)

3、添加对应路由:projecst/urls.py

path('project/<int:pk>/interfaces', views.ProjectsViewSet.as_view({
    'get', 'interfaces'  
}))

相关文章

网友评论

      本文标题:23、Django_rest framework_自定义acti

      本文链接:https://www.haomeiwen.com/subject/kkcgshtx.html