Django Rest 框架:permissions_classes 不工作
Django Rest Framework: permissions_classes not working
我需要创建一个嵌套路由。看起来像这样 api/<campaign-name>/content/<content-id>
。我知道有创建嵌套路由的包 (this and this)。我已经尝试过它们并且相当有限。所以我决定硬连线网址。网址和浏览量如下:
在urls.py
# contents
## detail, update, remove
url(
r'^api/campaign/(?P<campaign>[a-z0-9-]+)/content/(?P<content>\d+)/$',
ContentAPI.as_view({'get' : 'retrieve', 'put' : 'update', 'delete' : 'destroy'}),
name = "content-detail"
),
## toggle content verification
url(
r'^api/campaign/(?P<campaign>[a-z0-9-]+)/content/(?P<content>\d+)/toggle_status/$',
ContentAPI.as_view(
{'post' : 'toggle_status'},
permission_classes = [Or(IsContentManager, IsContentModerator)]
),
name = "content-toggle-status"
),
在views.py
class ContentAPI(viewsets.ModelViewSet):
permission_classes = [Or(IsContentManager)]
... # actions and methods here
一切正常,但权限似乎不起作用。无需登录系统即可访问API。如何在我的场景中强制执行权限。
错误在我这边。当我使用 router.register('api/(?P<domain>[a-z0-9]+)/sub-domain/(?P<sub_domain>[a-z0-9]+), SubdomainAPI)
生成嵌套路由时,我不得不在 SubdomainAPI 中过滤 domain
。
所以我在 initial()
做了这个:
def initial(self, request, *args, **kwargs):
self.domain = self._get_domain()
super(SubdomainAPI, self).initial(request, *args, **kwargs)
self._get_domain()
检查域是否存在并引发 404 错误。由于在权限检查之前出现 404 错误,我的测试失败了。
应该是:
def initial(self, request, *args, **kwargs):
super(SubdomainAPI, self).initial(request, *args, **kwargs)
self.domain = self._get_domain()
希望这对其他人偶然遇到类似问题有所帮助。
我需要创建一个嵌套路由。看起来像这样 api/<campaign-name>/content/<content-id>
。我知道有创建嵌套路由的包 (this and this)。我已经尝试过它们并且相当有限。所以我决定硬连线网址。网址和浏览量如下:
在urls.py
# contents
## detail, update, remove
url(
r'^api/campaign/(?P<campaign>[a-z0-9-]+)/content/(?P<content>\d+)/$',
ContentAPI.as_view({'get' : 'retrieve', 'put' : 'update', 'delete' : 'destroy'}),
name = "content-detail"
),
## toggle content verification
url(
r'^api/campaign/(?P<campaign>[a-z0-9-]+)/content/(?P<content>\d+)/toggle_status/$',
ContentAPI.as_view(
{'post' : 'toggle_status'},
permission_classes = [Or(IsContentManager, IsContentModerator)]
),
name = "content-toggle-status"
),
在views.py
class ContentAPI(viewsets.ModelViewSet):
permission_classes = [Or(IsContentManager)]
... # actions and methods here
一切正常,但权限似乎不起作用。无需登录系统即可访问API。如何在我的场景中强制执行权限。
错误在我这边。当我使用 router.register('api/(?P<domain>[a-z0-9]+)/sub-domain/(?P<sub_domain>[a-z0-9]+), SubdomainAPI)
生成嵌套路由时,我不得不在 SubdomainAPI 中过滤 domain
。
所以我在 initial()
做了这个:
def initial(self, request, *args, **kwargs):
self.domain = self._get_domain()
super(SubdomainAPI, self).initial(request, *args, **kwargs)
self._get_domain()
检查域是否存在并引发 404 错误。由于在权限检查之前出现 404 错误,我的测试失败了。
应该是:
def initial(self, request, *args, **kwargs):
super(SubdomainAPI, self).initial(request, *args, **kwargs)
self.domain = self._get_domain()
希望这对其他人偶然遇到类似问题有所帮助。