Django REST Framework的has_permission无法获取URL参数pk/id问题
解决方法
request.POST 仅能获取POST请求体中的表单参数,而URL路径中的<int:pk>属于路由解析参数,不会存在于请求体中,因此无法通过该方法获取。
在Django REST Framework的权限类has_permission方法中,所有路由解析出来的路径参数都会保存在视图实例的kwargs属性中,直接从该属性取值即可:
def has_permission(self, request, view): # 提取URL路径中的pk参数 pk = view.kwargs.get('pk') # 后续编写你的权限校验逻辑即可 pass
补充说明
- 如果你路由中定义的路径参数名不是
pk,比如是resource_id,把view.kwargs.get的key替换为对应参数名即可 - 如果当前请求对应无路径参数的列表接口,
view.kwargs.get('pk')会返回None,建议提前做空值判断避免后续逻辑报错 - 如果你是在
has_object_permission方法中做对象级权限校验,也可以直接通过方法传入的第三个参数obj直接获取对应实例,无需手动取pk查询
内容的提问来源于stack exchange,提问作者Jonathan Aplacador
相关产品推荐
相关产品推荐

