当前位置: 首页 > 面试题库 >

烧瓶路径使用带斜杠的路径

蒋哲
2023-03-14
问题内容

我正在尝试使用带有路径转换器的简单路由来获取Flask:

@api.route('/records/<hostname>/<metric>/<path:context>')

除非URL的“路径”部分使用斜杠,否则它将起作用。在这种情况下,我得到404。我理解该错误,但是我没有得到的是,文档中或Internet上的任何地方都没有解决此问题的方法。我觉得我是第一个尝试做此基本操作的人。

有没有办法使它与有意义的URL一起使用?例如,这种请求:

http://localhost:5000/api/records/localhost/disks.free//dev/disk0s2

问题答案:

PathConverterURL转换明确不包括前导斜杠;
因为大部分的路径应该这是故意 包括这样的斜线。

参见PathConverter源代码:

regex = '[^/].*?'

该表达式匹配任何 不以开头的内容/

您无法编码路径;%2F
如果不是所有服务器都在将URL路径传递给WSGI服务器之前对其进行解码,则尝试通过将URL编码为URL而不是URL分隔符而不是一部分值来在路径中进行斜杠的转换最多。

您必须使用其他转换器:

import werkzeug
from werkzeug.routing import PathConverter
from packaging import version

# whether or not merge_slashes is available and true
MERGES_SLASHES = version.parse(werkzeug.__version__) >= version.parse("1.0.0")

class EverythingConverter(PathConverter):
    regex = '.*?'

app.url_map.converters['everything'] = EverythingConverter

config = {"merge_slashes": False} if MERGES_SLASHES else {}
@api.route('/records/<hostname>/<metric>/<everything:context>', **config)

注意该merge_slashes选项;如果您安装了Werkzeug 1.0.0或更高版本,并将其保留为默认设置,则多个连续/字符将合为一个。

注册转换器必须在Flaskapp对象上完成,而不能在蓝图上完成。



 类似资料:
  • 我想重定向下的任何路径到静态应用。下面的视图应该捕获这些路径并提供相应的文件(它只打印本示例的路径)。这适用于,和。为什么路径会导致404错误?

  • 问题内容: 例如,采取以下两条路线。 根据文档,可以理解以下内容: 在第一种情况下,对路线的请求将返回404响应。已验证。 在第二种情况下有效,并将重定向到 我想看到的行为是 “逆” 的 情况下,两个 行为。例如将重定向到而不是其他方式。有没有办法定义采取此行为的途径? 根据我的理解,可以在路由上设置有效地获得第一种情况下第二种情况下的相同行为,但是我想做的是获得重定向行为,以始终将其重定向到UR

  • 我对应该在url中发送的变量中的斜线有一些问题。例如,id可能是这样的: 因为第一名的这个斜线,这是个问题。 在此之前,我对ID中间的斜杠有问题,但我用以下代码解决了这个问题: 但当斜杠放在第一位时,这不适用于这种情况。我还尝试使用RequestParam而不是PathVariable,但它在某些特殊字符方面存在问题,例如,当我使用RequestParam时,它会用空格替换“”,。。。 有谁能帮我

  • 文档指出,定义路由的首选方式是包含一个尾随斜杠: 这样,客户端就可以或并接收相同的结果。 但是,发布的方法没有相同的行为。 在这里,如果您,那么如果您不是在调试模式下运行,它将以失败,或者如果您是在调试模式下运行,它将以以下通知失败: 请求已发送到此URL(HTTP://localhost:5000/foo),但路由系统自动发出重定向到“HTTP://localhost:5000/foo/”。UR

  • 我正在阅读Flask quickstart指南,但是使用变量进行路由的示例对我来说并不适用。 http://127.0.0.1:5000/user/bob重定向到http://127.0.0.1:5000/user/bob/给我一个404 我还尝试了与指南中完全相同的代码。我的第一个要点中的错误是意料之中的吗?快速入门版本中的代码应该工作吗?还是我误解了什么? 我使用的是Python 2.7.10

  • 斜杠的数目可以是任意数目。如何在java中规范化路径,比如:

  • 问题内容: 我正在用React构建Flask应用程序,但最终遇到了路由问题。 后端负责成为API,因此某些路由如下所示: 以及通往React的主要路线: 我在React应用程序中使用react-router,一切正常,react- router带我进入,并获得了渲染视图,但是当我刷新页面时,Flask应用程序会处理此调用,并且会出错。 最好的解决方案是什么?我正在考虑重定向所有未调用的调用,这是不

  • 问题内容: 这个问题已经在这里有了答案 : Python中的Windows路径 (5个答案) 9个月前关闭。 在Python中将字符串设置为Windows的文件路径时,是否需要将其格式设置为: 还是转义不适用于Windows?目前,我的脚本在该行中给了我类似“非ASCII字符”的信息,因此我无法真正进行测试。 问题答案: 简短的回答: 改用gnibbler的建议使用正斜杠。 关于使用原始字符串: