use*_*875 0 django django-rest-framework
这是我的路由器/网址:
router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
Run Code Online (Sandbox Code Playgroud)
如果 request.user 是他自己的 User 对象,我只希望用户能够 PUT、POST、PATCH 和 DELETE。我的意思是,如果用户访问这个 URL
users/1
Run Code Online (Sandbox Code Playgroud)
然后 DRF 查找 pk 为 1 的用户。如果此用户不是 request.user,那么我不想让 request.user 能够 POST、PUT、PATCH 或 DELETE。如果用户是 request.user,那么我想允许这些请求。我有什么办法可以做到这一点吗?我正在使用 Viewsets,我希望我可以继续使用 Viewsets 来实现这一目标。
完成此操作的代码实际上就在文档页面上,位于本节底部。在这里引用它:
@detail_route(methods=['post'], permission_classes=[IsAdminOrIsSelf])
def set_password(self, request, pk=None):
...
Run Code Online (Sandbox Code Playgroud)
为此,您需要通读文档的身份验证和权限部分,特别是处理将数据与特定用户关联的部分,它建议覆盖默认perform_create视图方法以添加owner参数:
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
Run Code Online (Sandbox Code Playgroud)
回应以下评论:
该perform_create方法属于GenericAPIView该类,该类具有以下功能(引自此处:)
此类扩展了 REST 框架的
APIView类,为标准列表和详细信息视图添加了通常需要的行为。提供的每个具体通用视图都是通过
GenericAPIView与一个或多个 mixin 类组合构建的。
perform_create是属于这个泛型类的函数。再次引用文档的同一部分:
保存和删除钩子:
以下方法由 mixin 类提供,并提供对对象保存或删除行为的轻松覆盖。
perform_create(self, serializer)-CreateModelMixin保存新对象实例时调用。- ...
因此,该perform_create方法除了提供一种简单的方法来修改创建新对象时发生的情况外,没有其他用途。
| 归档时间: |
|
| 查看次数: |
1278 次 |
| 最近记录: |