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
相关产品推荐
相关产品推荐

