我的API使用Django REST框架(DRF(。特别是,我已经使用ModelViewSet
建立了几个路由,没有太多额外的编码。特别是,我有一条类似的路线
/api/v1/collection/<key>
在所有可能的密钥中,我确实需要阻止一个特定的密钥,比如special
。任何对/api/v1/collection/special
具有任何HTTP谓词的请求都将导致HTTP 404错误。
我能想到两种方法:
- 覆盖
ViewSet
层次结构上的某些方法。哪一个 - 在
urls.py
中,设置一个优先级更高的URL路由来拦截此URL,如path("collection/special", view=<404View>, name="collection-exception")
。这有道理吗?要路由到的适当异常视图是什么
推荐的方法是什么?以上任何一项,还是其他什么?
如果您正在使用ModelViewSet
,那么您应该覆盖get_queryset()
方法。如果键值错误,则引发Exception,否则返回queryset:
from rest_framework.exceptions import NotFound
class MyModelViewSet(viewsets.ModelViewSet):
# ...
def get_queryset(self):
key = self.kwargs.get("key")
if key == "special":
raise NotFound()
return MyModel.objecs.filter(pk=key)