2012-03-08 74 views
1

我正在使用Django-Rest-Framework。在跟随教程的同时,我能够通过定义ModelResource来制作CRUD API。现在,我想通过为GET提供API来限制访问,并且不提供POST,PUT或DELETE访问权限。 我试图将Django-Rest-Framework默认的CRUD操作限制为仅限GET和限制POST,PUT和DELETE

allowed_methods = ('GET') 

但是,这并不做任何事情。此外,我试图覆盖ModelResource的删除功能,但它也没有做任何事情,删除仍然有效。似乎是直接的事情,但我花了几个小时后仍未能找到答案。

+0

你能提供更多源代码吗?像你的类声明和/或你的网址模式? – 2012-03-14 00:51:34

回答

1

也许你正在使用这样的事情:

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)), 
) 

allowed_methods如果是在资源子会不会有用,它应该在一个View子类中,如ListModelView类,所以如果你改变你的urls.py w第i个这样的:

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)), 
) 

它会正常工作:)

3

刚看到这一点。你的代码中有一个小错误。相反的:

allowed_methods = ('GET') 

allowed_methods = ('GET',) 

注意后面的逗号,这是为了使Python把它作为一个字符串,而不是三个字符的列表清单。由于python将字符串视为字符列表,因此第一行计算为列表('G','E','T'),并且这些方法在您的类中都不可用。

1

你需要做这样的事情:

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 

Basicaly这是替代使用InstanceModelView,这也实现了PutUpdateDelete混入。