Ограничение операций CRUD по умолчанию в Django-Rest-Framework только для GET и ограничение POST, PUT и DELETE - PullRequest
1 голос
/ 08 марта 2012

Я использую Django-Rest-Framework. Следуя инструкциям, я смог создать API-интерфейсы CRUD, определив ModelResource. Теперь я хочу ограничить доступ, предоставляя API только для GET, а не для доступа POST, PUT или DELETE. Я пытался

allowed_methods = ('GET')

Но это ничего не делает. Кроме того, я попытался переопределить функцию удаления ModelResource, но она тоже ничего не делает, и удаление все еще работает.

Кажется, это прямолинейно, но я не смог понять это, даже потратив на это пару часов.

Ответы [ 3 ]

3 голосов
/ 05 мая 2012

Только что видел это. У вас есть небольшая ошибка в вашем коде. Вместо:

 allowed_methods = ('GET')

запись

allowed_methods = ('GET',)

Обратите внимание на запятую, чтобы Python рассматривал ее как список с одной строкой вместо списка с тремя символами. Из-за того, что python рассматривает строку как список символов, первая строка оценивается как список ('G','E','T'), и ни один из этих методов не доступен в вашем классе.

1 голос
/ 05 сентября 2012

Вам нужно сделать что-то вроде этого:

from djangorestframework.mixins import ReadModelMixin, UpdateModelMixin
from djangorestframework.views import ModelView
from djangorestframework.response import Response

from resources import MyResource

class MyResourceInstanceView(ReadModelMixin, ModelView):
  resource = MyResource

По сути, это заменяет использование InstanceModelView, которое также реализует миксины Put, Update и Delete.

1 голос
/ 13 апреля 2012

Может быть, вы используете что-то вроде этого:

resources.py

from djangorestframework.resources import ModelResource

from .models import Menu


class MenuResource(ModelResource):
    model = MenuOfTheDay
    allowed_methods = ('GET', )

urls.py

from djangorestframework.views import ListOrCreateModelView, InstanceModelView

from .resources import MenuResource


urlpatterns += patterns('',
    url(r'^api/menu/$', ListOrCreateModelView.as_view(resource=MenuResource), name='menu-resource-root'),
    url(r'^api/menu/(?P<pk>[0-9]+)/$', InstanceModelView.as_view(resource=MenuResource)),
)

allow_methods не будет полезен, если находится в подклассе Resource, он должен быть в подклассе View, как в ListModelView , поэтому если вы измените свой urls.py с этим :

from djangorestframework.views import ListModelView, InstanceModelView

from .resources import MenuResource


urlpatterns += patterns('',
    url(r'^api/menu/$', ListModelView.as_view(resource=MenuResource), name='menu-resource-root'),
    url(r'^api/menu/(?P<pk>[0-9]+)/$', InstanceModelView.as_view(resource=MenuResource)),
)

будет работать нормально :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...