我有一条路线:
@app.route("/login/<user>/<timestamp>")
def user(user, timestamp):.
但是,我需要这种形式——
@app.route("/login/<user><timestamp>")
def user(user, timestamp):.
即没有斜杠('/')。
有什么办法吗?
简短回答:鉴于这两个参数具有不重叠的模式,这是可能的。但是,通过给它一个通配符模式(你没有指定转换器)。这将导致所有内容都处理到user
的事实。话虽如此,建议有一个清晰的分隔符。
如文档中指定的那样,您可以通过编写变量来定义变量,例如 HTML 标记,例如<var>
,您还可以指定转换器,例如<converter:var>
。如果未指定转换器,则假定参数为不能包含斜杠的字符串。
然而,还有其他转换器,如int
、float
、path
和uuid
。
如果模式的编写方式很清楚,当第一个模式结束,第二个模式开始时,就可以处理这个问题。例如:
@app.route("/login/<int:day><user>")
可以工作,给定user
不能以数字开头,因为一旦数字序列结束,Flask 将解析<user>
参数。
然而,通过编写@app.route("/login/<user><timestamp>")
,这两种模式是重叠的:如果我们没有解析策略,任何拆分都可能是有效的。如果我没记错的话,引擎是贪婪的,在实践中会导致user
接受所有字符,而timestamp
没有。
由于默认string
不包含斜杠,因此我们知道斜杠充当清晰的分隔符,因为它未包含在示例中的两个变量中。