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路线执行相同的操作