gpt4 book ai didi

python - 为什么 Django 找不到这些 url,尽管正则表达式匹配?

转载 作者:太空宇宙 更新时间:2023-11-03 13:04:02 28 4
gpt4 key购买 nike

在 regex 的 python 文档中有关于“.”的描述。做:

(Dot.) In the default mode, this matches any character except a newline. If the DOTALL flag has been specified, this matches any character including a newline.

对于我在 Django 中做的一个项目,我设置了这个正则表达式:

url(r'^accounts/confirm/(.+)$', confirm,name='confirmation_view')

据我所知,这应该匹配任何以“accounts/confirm/”开头,然后是任意数量的任意字符的 url。然后将这些任意字符作为参数传递给函数“confirm”。到目前为止,还不错。

所以这个正则表达式应该匹配

accounts/confirm/fb75c6529af9246e4e048d8a4298882909dc03ee0/

一样
accounts/confirm/fb75c6529af9246e4e-048d8a4298882909dc03ee0/

accounts/confirm/fb75c6529af9246e4e=048d8a4298882909dc03ee0/

accounts/confirm/fb75c6529af9246e4e%20048d8a4298882909dc03ee0/

至少,这是我认为它会做的。但它没有,它只匹配第一个。 Django 不断给我返回 404 其他的。我不明白,因为表达式的 (.+) 部分应该表示“匹配一个或多个除换行符之外的任何字符”。

编辑:正如评论和答案所证明的那样,我的正则表达式是正确的。所以现在这是一个问题:为什么 Django 没有返回正确的 View ,而是返回 404。在将 url 传递给该正则表达式之前,它是否对 url 做了一些事情?

最佳答案

快速测试确认这应该有效:

>>>import re
>>>test = ["accounts/confirm/fb75c6529af9246e4e048d8a4298882909dc03ee0/", "accounts/confirm/fb75c6529af9246e4e-048d8a4298882909dc03ee0/", "accounts/confirm/fb75c6529af9246e4e=048d8a4298882909dc03ee0/", "accounts/confirm/fb75c6529af9246e4e%20048d8a4298882909dc03ee0/"]
>>>all([re.match(r'^accounts/confirm/(.+)$', item) for item in test])
True

这将在任何不匹配的情况下返回 false:

>>>test.append("something else")
>>>all([re.match(r'^accounts/confirm/(.+)$', item) for item in test])
False

问题一定出在别处。

关于python - 为什么 Django 找不到这些 url,尽管正则表达式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10066891/

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