在烧瓶中,是否可以使用 url 转换器而不使用斜杠"/"拆分它们?



我有一条路线:

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

但是,我需要这种形式——

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

即没有斜杠('/')。

有什么办法吗?

简短回答:鉴于这两个参数具有不重叠的模式,这是可能的。但是,通过给它一个通配符模式(你没有指定转换器)。这将导致所有内容都处理到user的事实。话虽如此,建议有一个清晰的分隔符

如文档中指定的那样,您可以通过编写变量来定义变量,例如 HTML 标记,例如<var>,您还可以指定转换器,例如<converter:var>如果未指定转换器,则假定参数为不能包含斜杠的字符串。

然而,还有其他转换器,如intfloatpathuuid

如果模式的编写方式很清楚,当第一个模式结束,第二个模式开始时,就可以处理这个问题。例如:

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

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

然而,通过编写@app.route("/login/<user><timestamp>"),这两种模式是重叠的:如果我们没有解析策略,任何拆分都可能是有效的。如果我没记错的话,引擎是贪婪的,在实践中会导致user接受所有字符,而timestamp没有。

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

最新更新