在Django REST fram中报告405细节视图之前,请检查有效的url

2024-10-17 06:25:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我的视图集如下所示:

class BoardViewSet(viewsets.GenericViewSet, ...):
    @detail_route(methods=["post"])
    def register(self, request, pk):
        board = self.get_object()
        ...

当我提出这些请求时,得到以下结果:

POST /board/1234/register -> 200
POST /board/BEEF/register -> 404 NOT FOUND
GET  /board/1234/register -> 405 NOT ALLOWED
GET  /board/BEEF/register -> 405 NOT ALLOWED

这是名单上最后一项与我有关。对无效的URL执行GET请求会返回不允许的响应,而不是找不到的响应,即使这是无效的URL。我理解为什么会发生这种情况,就Django和DRF的路由工作而言。我的问题有两个:

  1. 就HTTP响应代码语义而言,这是合适的行为吗?你知道吗
  2. 如果没有,有没有(好的)方法来解决这个问题?你知道吗

Tags: selfboardregisterurlgetnotpostclass
1条回答
网友
1楼 · 发布于 2024-10-17 06:25:41

Is this the appropriate behavior, in terms of HTTP response code semantics?

嗯,您只接受“/board/([^/]+)/register”url上的POST方法,因此返回405状态码似乎是合法的。你知道吗

If not, is there a (good) way to fix this?

您应该将视图lookup_value_regex设置得更具体一些,以便它只与您期望的ID匹配。这样,如果url regex不匹配,它将跳过该视图并继续,最终以404结束。你知道吗

相关问题 更多 >