You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Rest Framework中Router使用ModelViewSet时如何限制开放指定接口

有两种更简便优雅的实现方式,无需修改原有继承关系:

方法1:限制允许的HTTP动词(推荐,改动最小)

直接继承ModelViewSet,通过Django视图原生的http_method_names属性指定允许的请求方法即可:

class UsersView(ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    # GET对应list、retrieve两个接口,DELETE对应destroy接口
    http_method_names = ["get", "delete"]

路由注册逻辑完全不需要调整,原有的注册代码可以直接复用。这种方式逻辑清晰,后续如果要新增接口,只要在列表中添加对应的HTTP动词即可,维护成本极低。

方法2:精确禁用不需要的接口

如果需要更细粒度的控制(比如同样是GET请求,需要开放详情接口retrieve但禁用列表接口list),可以直接将不需要的action方法赋值为None:

class UsersView(ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    # 直接禁用增、改相关接口
    create = None
    update = None
    partial_update = None

这种方式的优点是控制粒度可以精确到单个接口,不受HTTP动词的限制,适合更复杂的接口权限场景。

内容的提问来源于stack exchange,提问作者dudulu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 22:45:03