所以我在后端有这个API URL,我想知道如何让它的一部分可选。
def create_file():
with open("test.txt", "w") as file:
file.write("A")
file.close()
create_file() #call here
因此前端会发生两件事。
1)当用户登录时,它会将它们带到列出所有项目的url(r'^api/documents/(?P<id>[0-9]+)$', GetDocumentsAPIView.as_view(), name='documents'),
。单击项目会使它们/home
,其中数字是项目的编号,并列出该项目的所有文档。这会发送到API网址/documents/85
。这很好。
2)另一个选项是,用户只需点击/api/documents/85
中的Documents
链接,即可将其带到navbar
。这应该只是转到API网址/documents
,最终转到确定最新项目的/api/documents/
,并在前端返回并呈现该文档的文档
我无法工作。不知道我是否可以只使用一个serializer.py
,或者如果我需要两个url()
。希望我发布的那个会将(?P<id>[0-9]+)$
视为可选项,如果没有任何内容会返回相同的GetDocumentsAPIView
,但事实并非如此。
编辑:包括我此时用于测试的视图。只需print()
即可查看是否有任何内容被路由到该视图。
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView
class GetDocumentsAPIView(APIView):
permission_classes = [IsAuthenticated]
def get(self, request, *args, **kwargs):
print(kwargs.get('id'))
return Response('Test')
答案 0 :(得分:1)
不需要为r'^api/documents/$'
添加网址格式,顺便提一下,可以启动相同的视图。只有在视图内部,您才必须假定id
是可选的:
if kwargs.get('id'):
# return specific document
else:
# return list of documents
我会将您的第一个网址格式重命名为“view_document”,这样您就可以在另一个更通用的视图中使用名称“文档”。
注意:我认为您的网址结构有误。根据REST,读取您的URL时,我希望在获取document
时看到id
documents/85
85。如果您确实列出了项目的文档,则该网址应为projects/85/documents/
或未指定projects/documents
。