Permissions 如何在ModelViewSet';s
使用ModelViewSet时,如何为POST请求编写自己的权限类 我已经试着写我自己的许可证,但没有成功。即使我的权限类返回false,它仍然授予对post请求的访问权限 models.py 权限.py url.py 如果我试图上传一张图片,为什么? 我的IsOwner权限类被评估,因为我可以在控制台中看到带有“TEST”的打印行 我的解决方案:Permissions 如何在ModelViewSet';s,permissions,django-rest-framework,Permissions,Django Rest Framework,使用ModelViewSet时,如何为POST请求编写自己的权限类 我已经试着写我自己的许可证,但没有成功。即使我的权限类返回false,它仍然授予对post请求的访问权限 models.py 权限.py url.py 如果我试图上传一张图片,为什么? 我的IsOwner权限类被评估,因为我可以在控制台中看到带有“TEST”的打印行 我的解决方案: 通过类列表,您使用了has\u object\u permission(),您需要在has\u permission()方法中编写代码 permis
通过类列表,您使用了
has\u object\u permission()
,您需要在has\u permission()方法中编写代码
permission_classes = [<class 'rest_framework.permissions.AllowAny'>]
非常感谢。你是对的!但我现在有另一个问题。(我编辑了我的问题)如何检查ForeignKey是否为用户所有?在has_object_permission中,我做了如下操作:return obj.building.user==request.user,但在has_permission中没有obj?建筑模型是否有用户的外键?请不要把两个问题混在一起。询问另一个关于外键问题的问题。是。我将我的解决方案添加到主题中,因为我解决了它。你能在这里发布你的建筑模型吗?是的,我将它添加到第一篇文章中
class BuildingImageViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows groups to be viewed or edited.
"""
serializer_class = BuildingImageSerializer
permission_classes = (permissions.IsAuthenticated, IsOwner,)
def get_queryset(self):
if self.request.user.is_authenticated:
return BuildingImage.objects.filter(building__user=self.request.user)
return None
class IsOwner(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
print("TEST")
return False
router = routers.DefaultRouter()
router.register(r'buildingimages', myrest_views.BuildingImageViewSet, base_name="buildingimage")
def has_permission(self, request, view):
if view.action == 'create':
building_url = request.POST.get('building')
building_path = urlparse(building_url).path
building_id = resolve(building_path).kwargs['pk']
building = Building.objects.get(id=building_id)
return building.user == request.user
return True
permission_classes = [<class 'rest_framework.permissions.AllowAny'>]
from rest_framework import permissions
class IsOwner(permissions.BasePermission):
def has_permission(self, request, view):
if <CONDITION>:
return True
else:
return False