【发布时间】:2016-06-22 23:40:06
【问题描述】:
我正在将旧系统重新实现为 Flask 应用程序,并且必须保持 url 模式不变。其中一个 url 直接包含用户的完整电子邮件地址(换句话说,电子邮件地址是 url 的一部分,而不是作为 GET 参数)。
当我向这个 url 发送请求时,Flask 会自动响应重定向到相同的 url,除了电子邮件地址中的“@”符号被替换为“%40”。例如,对/users/new/user@example.com/ 的请求被重定向到/users/new/user%40example.com/。当我将 POST 请求直接发送到第二个 url 时,我什至收到了来自 Flask 的响应,所以我假设在处理请求时“%40”会自动转换为“@”字符。
如何让 Flask 接受对包含“@”符号的 url 的请求而不重定向?这可能是 Werkzeug 的错,因为 Flask 的 URL 解析系统是建立在 Werkzeug 之上的。
编辑:我在此问题中列出的初始请求 URL 中错误地包含了斜杠。我的问题实际上是由于没有斜线引起的,而不是用 '%40' 替换 '@'。
【问题讨论】:
-
您能否更新您的 POST 网址,使其使用
%40而不是文字@,并避免往返?或者您关心的是地址行中的一个不错的 URL?一个文字@is legit,但在URL的域/路径部分仍然有点奇怪;可能 Flask 在替换它时反应过度。 -
我已尝试将 '@' 替换为 '%40' 的 URL 进行 POST,如上所述,但 Flask 仍将请求视为使用 '@' 符号发布。我同意将电子邮件地址作为 URL 路径的一部分很奇怪,但我无权更改它(许多客户端已经使用该端点,因此进行更改可能会破坏向后兼容性)。跨度>
标签: python flask url-routing werkzeug