Python 在Django rest框架中传递几个参数

Python 在Django rest框架中传递几个参数,python,django,django-rest-framework,Python,Django,Django Rest Framework,我对Django和Django rest框架是新手,我尝试创建几个路由来从数据库获取数据 现在在我的url.py文件中,我有一个 router = routers.DefaultRouter() router.register(r'cpuProjects', cpuProjectsViewSet, base_name='cpuProjects'), class cpuProjectsViewSet(viewsets.ViewSet): serializer_class = serializ

我对
Django
Django rest框架
是新手,我尝试创建几个路由来从数据库获取数据

现在在我的
url.py
文件中,我有一个

router = routers.DefaultRouter()
router.register(r'cpuProjects', cpuProjectsViewSet, base_name='cpuProjects'),
class cpuProjectsViewSet(viewsets.ViewSet):
  serializer_class = serializers.cpuProjectsSerializer
  # lookup_field = 'project_name'
  lookup_url_kwarg = 'project_name'

  def list(self, request):
    all_rows = connect_database()
    serializer = serializers.cpuProjectsSerializer(instance=all_rows, many=True)
    return Response(serializer.data)

  def retrieve(self, request, project_name=None):
    try:
      opc = {'name_proj' : project_name }
      all_rows = connect_database(opc)
    except KeyError:
        return Response(status=status.HTTP_404_NOT_FOUND)
    except ValueError:
        return Response(status=status.HTTP_400_BAD_REQUEST)
    serializer = serializers.cpuProjectsSerializer(instance=all_rows, many=True)
    return Response(serializer.data)
这个还这个

"cpuProjects": "http://127.0.0.1:8000/cpuProjects/"
我有可能做到这一点
http://127.0.0.1:8000/cpuProjects/
=>返回所有项目
http://127.0.0.1:8000/cpuProjects/ad
=>返回特定项目

在我看来,我有这个

router = routers.DefaultRouter()
router.register(r'cpuProjects', cpuProjectsViewSet, base_name='cpuProjects'),
class cpuProjectsViewSet(viewsets.ViewSet):
  serializer_class = serializers.cpuProjectsSerializer
  # lookup_field = 'project_name'
  lookup_url_kwarg = 'project_name'

  def list(self, request):
    all_rows = connect_database()
    serializer = serializers.cpuProjectsSerializer(instance=all_rows, many=True)
    return Response(serializer.data)

  def retrieve(self, request, project_name=None):
    try:
      opc = {'name_proj' : project_name }
      all_rows = connect_database(opc)
    except KeyError:
        return Response(status=status.HTTP_404_NOT_FOUND)
    except ValueError:
        return Response(status=status.HTTP_400_BAD_REQUEST)
    serializer = serializers.cpuProjectsSerializer(instance=all_rows, many=True)
    return Response(serializer.data)
现在我希望我的Url接受这样的内容

http://127.0.0.1:8000/cpuProjects/ad/comments
http://127.0.0.1:8000/cpuProjects/ad/ussing
http://127.0.0.1:8000/cpuProjects/ad/process

为此,我添加了这个新的url

router.register(r'cpuProjects/([a-zA-Z0-9]+)$', cpuProjectsViewSet, base_name='cpuProjects'),
但是现在当我尝试这个的时候

http://127.0.0.1:8000/cpuProjects/ad/ussing
我获得“未找到页面”

我知道这个URL必须调用检索函数来获取参数,所以,为什么会出现这个错误

此URL不会执行与以下相同的过程

http://127.0.0.1:8000/cpuProjects/ad 

提前谢谢

路由器框架不适用于多个参数。。您可以使用主键(在正则表达式中)手动执行此操作。

这与我们在前面的

从rest\u framework.decorators导入细节\u路由、列表\u路由
@详细信息路径(url路径='(?P[\w-]+)/(?P[\w-]+))
def按名称获取(self、request、pk=None、slug=None、what=None):
打印(slug,什么)
同样,您也可以对
列表\u路线执行相同的操作