mic*_*mit 10 django rest django-rest-framework
我刚刚开始使用django-rest-framework.除了可用的例子很少之外,它非常热衷于此.让api工作变得很好,但所有额外的东西都是一个难题.(添加额外的自定义字段等)
现在我想知道如何限制allowed_methods,例如ListView或DetailView.将它添加到views.py中的类,就像我读到某处作为答案...似乎没有任何影响:
allowed_methods = ('GET',)
Run Code Online (Sandbox Code Playgroud)
Aks*_*aaj 68
如果您使用的是ModelViewSet,但仍想限制一些可以添加的方法http_method_names.
例:
class SomeModelViewSet(viewsets.ModelViewSet):
queryset = SomeModel.objects.all()
serializer_class = SomeModelSerializer
http_method_names = ['get', 'post', 'head']
Run Code Online (Sandbox Code Playgroud)
一旦你这样做,get,post和head将被允许.但是put,patch并且delete不会被允许.
抱歉死灵,但我偶然发现这个问题寻找类似的问题。
我只想允许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")
Run Code Online (Sandbox Code Playgroud)
根据近年来的反对票数,可能不再相关了。它在 12 年是相关的:)
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/
Run Code Online (Sandbox Code Playgroud)
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'),
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14874 次 |
| 最近记录: |