django-rest-framework将allowed_methods限制为GET

时间:2012-03-03 21:06:50

标签: django rest django-rest-framework

我刚开始使用django-rest-framework。 除了可用的例子很少之外,它非常热情。 让api工作变得很好,但所有额外的东西都是一个难题。 (添加额外的自定义字段等。)

现在我想知道如何限制allowed_methods,例如ListView或DetailView。 将它添加到views.py中的类,就像我在某处读到的那样......似乎没有任何影响:

allowed_methods = ('GET',)

6 个答案:

答案 0 :(得分:57)

如果您正在使用ModelViewSet并且仍想限制某些方法,则可以添加class SomeModelViewSet(viewsets.ModelViewSet): queryset = SomeModel.objects.all() serializer_class = SomeModelSerializer http_method_names = ['get', 'post', 'head']

示例:

get

执行此操作后,将允许postheadput。但不允许使用patchdeleteng-options="values as values.label for values in array_object"

[无耻的插件]:如果这个答案有帮助,你会在this上看到我在DRF上的一系列帖子。

答案 1 :(得分:2)

就像django-rest-framework中的几乎所有东西一样,一旦你发现它,它就非常简单。 在url而不是使用ListOrCreateModelView我不得不使用ListModelView。

答案 2 :(得分:1)

除了 http_method_names,还有 Django Rest Framework 在这里提出的解决方案:https://www.django-rest-framework.org/api-guide/viewsets/#custom-viewset-base-classes

它包括从 GenericViewSet 而不是 ModelViewSet 和适当的 mixin 类继承。

如果您想要一个仅提供 listretrieve 方法(它们都使用 GET)的视图集,请执行以下操作:< /p>

class ListRetrieveViewSet(
      Viewsets.GenericViewSet,
      mixins.ListModelMixin,  
      mixins.RetrieveModelMixin,
)
                                

答案 3 :(得分:0)

Django-rest-framework实际上有很多例子..

查看http://django-rest-framework.orghttp://django-rest-framework.org/contents.htmlhttp://rest.ep.io/,了解一些不错的示例和文档。

如果你自己设计一个REST函数,而不是使用任何django-rest-framework魔法(比如rest.ep.io)来为你生成它,你应该研究一下mixin(http:// django- rest-framework.org/howto/mixin.html)。

如果您想限制只获取方法。只需使用def get(...)和mixin类。

提供的链接示例:

curl -X GET http://rest.ep.io/mixin/

urls.py

from djangorestframework.compat import View
from djangorestframework.mixins import ResponseMixin
from djangorestframework.renderers import DEFAULT_RENDERERS
from djangorestframework.response import Response

from django.conf.urls.defaults import patterns, url
from django.core.urlresolvers import reverse


class ExampleView(ResponseMixin, View):
    renderers = DEFAULT_RENDERERS

    def get(self, request):
        response = Response(200, {'description': 'Some example content',
                                  'url': reverse('mixin-view')})
        return self.render(response)


urlpatterns = patterns('',
    url(r'^$', ExampleView.as_view(), name='mixin-view'),
)

答案 4 :(得分:0)

对不起,坏死,但我偶然发现了这个问题,希望找到一个类似的问题。

我只想允许retrieve(),但不允许list()。我最终要做的是:

from rest_framework import viewsets
from rest_framework.exceptions import MethodNotAllowed

from myapp.models import MyModel

class MyViewSet(viewsets.ModelViewSet):
    http_method_names = ["get"]
    queryset = MyModel.objects.all()
    serializer_class = MySerializer

    def list(self, request, *args, **kwargs):
        raise MethodNotAllowed("GET")

答案 5 :(得分:0)

您可以通过这种方式限制数据。在ModelViewSet中,您可以添加 http_method_names 来限制数据。

@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
@AllArgsConstructor
public class Example{

 private String local_PC;

}

您可以获取有关https://www.django-rest-framework.org/tutorial/2-requests-and-responses/

的详细信息