我有一条路线:
@app.route("/login/<user>/<timestamp>")
def user(user, timestamp):.
但是,我需要这种形式-
@app.route("/login/<user><timestamp>")
def user(user, timestamp):.
即不带斜杠('/')。
有什么办法吗?
答案 0 :(得分:1)
简短答案:这两个参数可能具有非重叠模式。但是,通过为其提供通配符模式(您未指定转换器)。这将导致所有内容都处理到user
的事实。话虽如此,建议有一个清晰的分隔符。
如documentation中所指定,您可以通过像HTML标签(如<var>
这样写变量来定义变量,也可以指定<converter:var>
之类的转换器。如果未指定 转换器,则假定该参数是可以 not 包含斜杠的字符串。
但是还有其他转换器,例如int
,float
,path
和uuid
。
如果以清楚第一个模式何时结束,第二个模式开始的方式编写模式,则可以进行处理。例如:
@app.route("/login/<int:day><user>")
可以工作,因为user
不能以数字开头,因为一旦数字序列结束,Flask将解析<user>
参数。
但是,通过编写@app.route("/login/<user><timestamp>")
,这两种模式是重叠的:如果我们没有解析 strategy 的方法,那么任何分割都可能是有效的分割。如果我没记错的话,由于引擎是贪婪,实际上,它会导致user
包含所有字符,而timestamp
不包含所有字符。
由于默认的string
不包含斜杠,因此我们知道斜杠充当了清晰的分隔符,因为示例中两个变量均未包含斜杠。