【问题标题】:GET Method Not Allowed: /api/banners in django rest framework不允许使用 GET 方法:django rest 框架中的 /api/banners
【发布时间】:2021-07-15 14:27:30
【问题描述】:

我在获取查询集列表时尝试使用 ListModelMixin。我知道我可以使用 ListAPIView,但为了便于理解,我使用 ListModelMixin。我调用了 api,但我得到 Get 方法是不允许的。

我的看法:

class BannersView(GenericAPIView,
                  mixins.ListModelMixin):
    permission_classes = [AllowAny]
    queryset = Banners.objects.all().order_by('-id')[:1]
    serializer_class = BannersSerializer

我的网址:

path('api/banners',views.BannersView.as_view(),name='api-banners'),

Listmodelmixin 与genericview 使用不一样吗??

【问题讨论】:

    标签: django api django-rest-framework get mixins


    【解决方案1】:

    不,因为ListAPIView 定义了get 方法

    来自source

    class ListAPIView(mixins.ListModelMixin,
                      GenericAPIView):
        """
        Concrete view for listing a queryset.
        """
        def get(self, request, *args, **kwargs):
            return self.list(request, *args, **kwargs)
    

    你也可以这样做,但显然是重新发明轮子

    【讨论】:

    • 你的意思是我必须像上面那样编写自定义 get 函数。我真的不明白mixins的使用。什么时候用这个listmodelmixin,什么时候用simple listapiview??
    • 不,你只是扩展 ListAPIView,mixins 的意义在于拥有可在各种类中使用的可重用方法(在此示例中,list 方法来自 ListModelMixin)。 ListAPIView 不仅是 DRF 中使用 ListModelMixin 的类
    • class ListAPIView(mixins.ListModelMixin, GenericAPIView): 为什么要用ListAPIView作为类名??它可以是任何名称对吗?此外,我们应该在代码中使用 list 函数,但您使用的是 get。我不太明白。
    • 这是 ListAPIView 类的来源,而不是你应该写的东西,因为你的问题是你所拥有的和 ListAPIView 有什么区别。只是你没有实现get方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 2016-03-29
    • 2019-05-04
    • 1970-01-01
    • 2019-12-09
    • 2015-10-31
    相关资源
    最近更新 更多