我刚开始使用django-rest-framework。 除了可用的例子很少之外,它非常热情。 让api工作变得很好,但所有额外的东西都是一个难题。 (添加额外的自定义字段等。)
现在我想知道如何限制allowed_methods,例如ListView或DetailView。 将它添加到views.py中的类,就像我在某处读到的那样......似乎没有任何影响:
allowed_methods = ('GET',)
答案 0 :(得分:57)
如果您正在使用ModelViewSet并且仍想限制某些方法,则可以添加class SomeModelViewSet(viewsets.ModelViewSet):
queryset = SomeModel.objects.all()
serializer_class = SomeModelSerializer
http_method_names = ['get', 'post', 'head']
。
示例:
get
执行此操作后,将允许post
,head
和put
。但不允许使用patch
,delete
和ng-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 类继承。
如果您想要一个仅提供 list 和 retrieve 方法(它们都使用 GET)的视图集,请执行以下操作:< /p>
class ListRetrieveViewSet(
Viewsets.GenericViewSet,
mixins.ListModelMixin,
mixins.RetrieveModelMixin,
)
答案 3 :(得分:0)
Django-rest-framework实际上有很多例子..
查看http://django-rest-framework.org,http://django-rest-framework.org/contents.html和http://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/
的详细信息