Flask将请求重定向到包含“@”的网址

时间:2016-03-08 20:25:15

标签: python flask url-routing werkzeug

我正在重新实现作为Flask应用程序的遗留系统,并且必须保持url模式。其中一个网址直接包含用户的完整电子邮件地址(换句话说,电子邮件地址是网址的一部分,而不是GET参数)。

当我向此网址发送请求时,除非电子邮件地址中的“@”符号替换为“%40”,否则Flask会自动回复重定向到相同的网址。例如,对/users/new/user@example.com/的请求会重定向到/users/new/user%40example.com/。当我将POST请求直接发送到第二个URL时,我甚至会收到Flask的回复,因此我假设在处理请求时'%40'会自动转换为'@'字符。

如何让Flask接受包含“@”符号而不重定向的网址的请求?这可能是Werkzeug的错,因为Flask的URL解析系统建立在Werkzeug上。

编辑:我在此问题中列出的初始请求网址中错误地包含了一个尾部斜杠。事实上,我的问题是由于没有斜线,而不是用'%40'取代'@'。

1 个答案:

答案 0 :(得分:0)

事实证明9000是正确的:' @' sign是URL中完全合法的字符。因此,这不应该是Flask抱怨的。比转换' @'更不明显。到'%40'在重定向的URL中,初始请求中缺少尾部斜杠。在写我的问题时,我非常关注来自' @'到'%40' (事实证明,在URL术语中也是如此),我没有注意到第一个URL末尾缺少尾部斜杠,而在编写此问题时错误地将其包括在内。

将尾部斜杠添加到POST网址,无论该网址是否包含' @'或者'%40',解决了这个问题。如果Flask取代了' @'与'%40'重定向时,没什么好担心的。真正的问题可能完全是由其他原因造成的。