15

django-rest-frameworkを始めたばかりです。利用できる例がほとんどないという事実を除いて、それについてはかなり熱心です。APIを機能させることは順調に進んでいますが、余分なものはすべてパズルです。(カスタムフィールドの追加など)

ここで、たとえばListViewやDetailViewでallowed_methodsを制限するにはどうすればよいのでしょうか。私が答えとしてどこかで読んだように、これをviews.pyのクラスに追加すると...効果がないようです:

allowed_methods = ('GET',)
4

5 に答える 5

100

ModelViewSet を使用していて、いくつかのメソッドを制限したい場合は、追加できhttp_method_namesます。

例:

class SomeModelViewSet(viewsets.ModelViewSet):
    queryset = SomeModel.objects.all()
    serializer_class = SomeModelSerializer
    http_method_names = ['get', 'post', 'head']

これを行うと、getpostおよびheadが許可されます。ただし、、putおよびpatchdelete許可されません。

于 2015-07-16T10:00:57.050 に答える
2

django-rest-framework のほとんどすべてがそうであるように、一度見つければ非常に単純です。ListOrCreateModelView を使用する代わりに、URL で ListModelView を使用する必要がありました。

于 2012-03-03T21:20:30.543 に答える
2

http_method_namesの他に、Django Rest Framework がここで提案するこのソリューションがあります: https://www.django-rest-framework.org/api-guide/viewsets/#custom-viewset-base-classes

これは、ModelViewSetではなくGenericViewSetからの継承と、適切な mixin クラスからの継承で構成されます。

listメソッドとretrieveメソッド (両方ともGETを使用)のみを提供するビューセットが必要な場合は、次のようにします。

class ListRetrieveViewSet(
      Viewsets.GenericViewSet,
      mixins.ListModelMixin,  
      mixins.RetrieveModelMixin,
)
                                
于 2021-01-17T04:52:45.640 に答える
0

近年の反対票に基づいて、おそらくもう関連性がありません.. '12年には関連性がありました:)

Django-rest-framework には、実際には非常に多くの例があります。

http://django-rest-framework.orghttp://django-rest-framework.org/contents.htmlhttp://rest.ep.io/で良い例とドキュメントをご覧ください。

django-rest-framework マジック (rest.ep.io など) を使用せずに自分で REST 関数を設計している場合は、mixin ( http://django-rest-framework .org/howto/mixin.html )。

getメソッドのみに制限したい場合。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'),
)
于 2012-03-03T21:19:55.570 に答える