【发布时间】:2020-10-05 16:55:52
【问题描述】:
我有一个相当简单的 REST api,但我仍然不明白视图类型之间的区别。任何与模型相关的事情,我都是通过 ModelViewSets 和 ModelSerializers 来完成的。可以用路由器,swagger docs里有参数,都好!
但是,如果我没有模型(例如,我有一个接受 2 个参数(var1 和 var2)的函数并且 POST 请求将它们相乘,那么我最好的选择是什么?我更喜欢涉及序列化程序的选项,因为我我希望获得 Swagger 文档中显示的参数。我知道我有 ViewSet 选项,但它没有给我 swagger 中的参数。有没有任何选项可以给我这些选项?
编辑: 我确实找到了一个半解决方案。请看以下代码:
class Test1(generics.GenericAPIView):
"""
Test
"""
def get_queryset(self):
print(123)
return []
def get_serializer_class(self):
return Test1Serializer
def get(self, request):
print('abc')
return Response([1, 2, 3])
def post(self, request):
#multiply var1 and var2 here and return the result
在这个例子中,我使用了 get_queryset 方法,但我不会使用它(所以它充当了一个虚拟对象)。我可以让那个函数返回一些空数组吗?那会发生什么?有更好的解决方案吗?我觉得我在这里滥用了 GenericAPIView 的使用。使用普通的 ViewSet 没有更好的解决方案吗?
EDIT2:我稍微更新了上面的代码。现在看起来像这样:
class Test1(generics.GenericAPIView):
"""
Test
"""
serializer_class = Test1Serializer
def get_queryset(self):
print('Running get_queryset')
return [1, 2, 3, 4]
def get(self, request):
data = self.get_queryset()
print('Queryset data', data)
return Response(data)
def post(self, request):
return Response([1, 2, 3])
我没有将 get_queryset 用作虚拟对象,但我可以在其中执行 GET 请求代码。如果我发布请求,此代码不会运行吗?我这样做对吗?
【问题讨论】:
标签: django django-rest-framework