在这种情况下如何使用 HttpResponseForbidden?

How to use HttpResponseForbidden in this case?

这是我的代码的一部分:

def get_queryset(self):
    if self.request.user.links.filter(pk=self.kwargs['pk']).exists():
        return super(View, self).get_queryset()
    else:
        return HttpResponseForbidden()

我想检查用户是否访问了他或她的link,如果没有return HttpResponseForbidden。 我的代码在 raise PermissionDenied 下运行良好,但据我所知,这是不好的做法。

如何使我的视图与 HttpResponseForbidden 一起工作?

编辑: 如果我使用 HttpResponseForbidden() 我会捕获 'HttpResponseForbidden' object has no attribute 'filter'

您应该在调度方法中进行所有权限检查。

可能您已经覆盖它们以使用 login_required 进行装饰,因此在同一个地方继续进行权限检查也不会更糟。

@login_required
def dispatch(self, request, *args, **kwargs):
    if not request.user.links.filter(pk=kwargs.get('pk', None)).exists():
        return HttpResponseForbidden()
    return super(View, self).dispatch(request, *args, **kwargs)