在flask中,是否可以使用URL转换器而不用斜杠“ /”将其拆分?

时间:2018-09-18 10:25:18

标签: python django flask django-templates

我有一条路线:

 @app.route("/login/<user>/<timestamp>")
 def user(user, timestamp):. 

但是,我需要这种形式-

 @app.route("/login/<user><timestamp>")
 def user(user, timestamp):.

即不带斜杠('/')。

有什么办法吗?

1 个答案:

答案 0 :(得分:1)

简短答案:这两个参数可能具有非重叠模式。但是,通过为其提供通配符模式(您未指定转换器)。这将导致所有内容都处理到user的事实。话虽如此,建议有一个清晰的分隔符

documentation中所指定,您可以通过像HTML标签(如<var>这样写变量来定义变量,也可以指定<converter:var>之类的转换器。如果未指定 转换器,则假定该参数是可以 not 包含斜杠的字符串。

但是还有其他转换器,例如intfloatpathuuid

如果以清楚第一个模式何时结束,第二个模式开始的方式编写模式,则可以进行处理。例如:

@app.route("/login/<int:day><user>")

可以工作,因为user不能以数字开头,因为一旦数字序列结束,Flask将解析<user>参数。

但是,通过编写@app.route("/login/<user><timestamp>"),这两种模式是重叠的:如果我们没有解析 strategy 的方法,那么任何分割都可能是有效的分割。如果我没记错的话,由于引擎是贪婪,实际上,它会导致user包含所有字符,而timestamp不包含所有字符。

由于默认的string不包含斜杠,因此我们知道斜杠充当了清晰的分隔符,因为示例中两个变量均未包含斜杠。