Django通用视图generics.ListAPIView接受POST方法

5

我有一个Django视图,扩展了generics.ListAPIView。它可以处理get请求,但是由于URL的字符限制,现在我需要通过POST发送请求。这是相同的请求,唯一需要改变的是方法为POST。 我的当前代码非常简单:

class MyClass(generics.ListAPIView):
serializer_class = MySerializer
paginate_by = 1

def get_queryset(self):
    queryset = SomeClass.objects.all()
    # do some filtering

我该如何为这个类添加POST支持?

我不确定我是否正确理解您的意思,您是想用POST方法发送GET请求,还是想在您的类中添加POST方法? - Max
1
使用POST方法来检索记录与REST规范相违背,不建议这样做。 - Benton Snyder
2个回答

7

试试这个:

class MyClass(generics.ListAPIView):
    serializer_class = MySerializer
    paginate_by = 1

    def get_queryset(self):
        queryset = SomeClass.objects.all()
        # do some filtering


    def post(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

3
您可以使用ListCreatAPIView,并覆盖create方法,与您的list方法相同。也许您只需执行以下操作:
class MyClass(generics.ListCreateAPIView):
    serializer_class = MySerializer
    paginate_by = 1

    def get_queryset(self):
        queryset = SomeClass.objects.all()
        # do some filtering
    
    def create(self, request, *args, **kwargs):
        # maybe replace request.method with 'GET'
        self.list(request, *args, **kwargs)

但我建议按照指定的方法使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接