gpt4 book ai didi

python - Django URL 中带有斜杠的命名组

转载 作者:太空宇宙 更新时间:2023-11-03 14:09:48 25 4
gpt4 key购买 nike

我定义了一组以下 URL:

GET /data/(?P<tag>[^/]+)$
POST /data/(?P<tag>[^/]+)/action_1$
POST /data/(?P<tag>[^/]+)/action_2$
...

我想知道是否可以使用包含斜杠的标签?

例如,当我尝试获取标签 a/b/c 的数据时,我总是收到 404 错误。尽管我在形成实际 URL 之前引用了标签(即前一种情况的 /data/a%2Fb%2Fc),但获得的 URL 仍然不匹配(尽管 a%2Fb%2Fc code> 应该匹配 [^/]+),因为看起来 Django 执行隐式取消引用,这是不希望的。如何在不改变 URL 形成方案的情况下解决这个问题?

最佳答案

斜杠就是斜杠,无论是否带引号。这就是 RFC 中的定义方式,也是 Django(正确)处理它的方式。 Web 服务器不应区分 url 路径中带引号的实体和不带引号的实体,除非不带引号的实体是具有特定含义的保留字符。

您可以做的就是将更具体的网址放在前面。 Django 始终使用第一个匹配的 url,这样以 /action_1/action_2 结尾的调用将被路由到更具体的 url,而其他所有内容都会回退到更通用的网址。然后您可以更改捕获组以接受斜杠:

urlpatterns = [
url(r'^data/(?P<tag>.+)/action_1$', action1_view),
url(r'^data/(?P<tag>.+)/action_2$', action2_view),
url(r'^data/(?P<tag>.+)$', general_view),
]

关于python - Django URL 中带有斜杠的命名组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48591575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com