Python Django rest框架[视图]:用户只能更新他们创建的模块

Python Django rest框架[视图]:用户只能更新他们创建的模块,python,django,django-rest-framework,django-views,Python,Django,Django Rest Framework,Django Views,因此,我有一个Django应用程序的视图,用于更新/删除用户配置文件。我想知道是否有更好的方法来检查请求更改的人是否与url中的人相同 请求url如下所示/profile/ 类用户详细信息(RetrieveUpdatedStroyapiView): queryset=User.objects.all() serializer_class=UserSerializerFull 权限\u类=[IsAuthenticated] 查找\u field=“用户名” def put(自我、请求、*args、

因此,我有一个Django应用程序的视图,用于更新/删除用户配置文件。我想知道是否有更好的方法来检查请求更改的人是否与url中的人相同

请求url如下所示
/profile/

类用户详细信息(RetrieveUpdatedStroyapiView):
queryset=User.objects.all()
serializer_class=UserSerializerFull
权限\u类=[IsAuthenticated]
查找\u field=“用户名”
def put(自我、请求、*args、**kwargs):
如果str(request.user)==kwargs.get(“用户名”):
return super().put(请求,*args,**kwargs)
返回响应(
数据={“msg”:“未经授权的请求”},状态=状态。HTTP_403_禁止
)
def补丁(self、request、*args、**kwargs):
如果str(request.user)==kwargs.get(“用户名”):
return super().patch(请求,*args,**kwargs)
返回响应(
数据={“msg”:“未经授权的请求”},状态=状态。HTTP_403_禁止
)
def删除(self、request、*args、**kwargs):
如果str(request.user)==kwargs.get(“用户名”):
return super().delete(请求,*args,**kwargs)
返回响应(
数据={“msg”:“未经授权的请求”},状态=状态。HTTP_403_禁止
)
由于所有的方法都在重复相同的代码,有没有一种方法可以只写一次,然后在任何地方都使用它


对于用户配置文件制作的其他模型,我也有同样的问题,因为许多代码都在重复自身。

这就是权限的用途

class IsOwner(IsAuthenticated):
    def has_object_permission(self, request, view, obj):
        return obj.user == request.user

类似的方法可以实现这一点,但您必须根据需要进行调整。

您可以实现自定义权限类,如下所示:

from rest_framework import permissions


class IsRequestingUser(permissions.BasePermission):

    def has_object_permission(self, request, view, obj):
        # Write permissions are only allowed to the owner of the snippet.
        return obj.user == request.user
在类中使用此权限类:

class UserDetail(RetrieveUpdateDestroyAPIView):
    # other logic
    permission_classes = [IsAuthenticated, IsRequestingUser]

    # other logic
    

有关更多详细信息,请参阅。

谢谢您将查看它。谢谢您的帮助!