通过URL将变量传递给Flask应用
我在我的Flask应用程序中有这个:
@app.route("/changeip/<ip>")
def change_ip(ip) :
return ip
现在如果我这样调用它:
http://127.0.0.1:5000/changeip?ip=1.2.2.2
它就会显示“找不到网址”...我到底哪里出错了呢?
3 个回答
-1
这个被认可的回答是对的,但我想补充一下,原作者在他的http请求中似乎最初想尝试的方法。
另一种传递变量的方法是通过问号,这个问号用来分隔网址中的变量,然后使用requests库。
import requests
然后在这个方法里,
@app.route("/changeip")
def change_ip():
return requests.args.get('ip', '')
对于网址,你可以通过问号来传递变量,就像你最开始尝试的那样。
http://127.0.0.1:5000/changeip?ip=1.2.2.2
2
你应该使用:
app.route('/something/<ip>')
def function(ip):
而且当你使用url_for的时候,也应该把ip的值传进去:
url_for('function', ip='your_ip_address')
8
第一种路由描述的是一个包含值的网址,也就是说网址的一部分是动态的。第二种网址则是没有变量的路由,但它在网址中有一个查询参数。
如果你使用第一种路由,网址应该像这样:http://127.0.0.1/changeip/1.2.2.2
。
如果你使用第二种网址,路由应该是/changeip
,对应的函数应该写成def change_ip():
,而这个值则需要通过request.args['ip']
来获取。
通常来说,路由应该描述那些总是需要存在的参数,而表单或查询参数则用来处理用户提交的数据。