django-rest-framework ограничивает значение allow_methods значением GET - PullRequest
9 голосов
/ 04 марта 2012

Я только начал с django-rest-framework.Довольно восторженно, за исключением того факта, что примеров очень мало.заставить API работать, все отлично, но все лишнее - загадка.(добавление дополнительных настраиваемых полей и т. д.)

Теперь мне интересно, как можно ограничить allow_methods, например, в ListView или DetailView.Добавление этого к классу в views.py, как я читал где-то в качестве ответа ... похоже, не имеет никакого эффекта:

allowed_methods = ('GET',)

Ответы [ 4 ]

58 голосов
/ 16 июля 2015

Если вы используете ModelViewSet и по-прежнему хотите ограничить некоторые методы, вы можете добавить http_method_names.

Пример:

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

После того, как вы это сделаете, get, post и head будут разрешены. Но put, patch и delete не будут разрешены.

[Бесстыдный плагин]: Если этот ответ был полезен, вам понравятся мои серии постов на DRF на https://www.agiliq.com/blog/2019/04/drf-polls/.

2 голосов
/ 04 марта 2012

Как почти все в django-rest-framework, как только вы это выясните, все очень просто.В URL вместо использования ListOrCreateModelView мне пришлось использовать ListModelView.

0 голосов
/ 08 августа 2018

Извините за некро, но я наткнулся на этот вопрос в поисках аналогичной проблемы.

Я только хотел разрешить 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")
0 голосов
/ 04 марта 2012

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'),
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...