列出所有的url参数
在server.py中添加以下内容:
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def hello_world():
return request.args.__str__()
if __name__ == '__main__':
app.run(port=5000, debug=True)
在浏览器中访问http://127.0.0.1:5000/?name=Loen&age&app=ios&app=android,将显示:
ImmutableMultiDict([('name', 'Loen'), ('age', ''), ('app', 'ios'), ('app', 'android')])
中文
较新的浏览器也支持直接在url中输入中文(最新的火狐浏览器内部会帮忙将中文转换成符合URL规范的数据),在浏览器中访问http://127.0.0.1:5000/?info=我爱你,将显示:
ImmutableMultiDict([('info', '我爱你')])
request.full_path和request.path
可以通过request.full_path和request.path 查看浏览器传给我们的Flask服务的数据
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def hello_world():
print(request.path) # 这里的 print 会在控制台中输出
print(request.full_path)
return request.args.__str__()
if __name__ == '__main__':
app.run(port=5000, debug=True)
浏览器访问http://127.0.0.1:5000/?info=我爱你&to=girl,运行server.py的终端会输出:
获取指定的参数值
例如,要获取键info对应的值,如下修改server.py:
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def hello_world():
return request.args.get('info')
if __name__ == '__main__':
app.run(port=5000)
运行server.py,在浏览器中访问http://127.0.0.1:5000/?info=我爱你&to=girl,浏览器将显示:
开启debug
不过,当我们访问http://127.0.0.1:5000/时候却出现了500错误,浏览器显示:
我们返回server.py, 开启debug
再次访问:
这是因为Flask不允许返回None, 而没有在URL参数中找到info。所以request.args.get('info') 返回Python内置的None。
解决方法很简单,我们先判断下它是不是None:
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def hello_world():
r = request.args.get('info')
if r==None:
# do something
return ''
return r
if __name__ == '__main__':
app.run(port=5000, debug=True)
也可以, 设置默认值,也就是取不到数据时用这个值:
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def hello_world():
r = request.args.get('info', 'welcome')
return r
if __name__ == '__main__':
app.run(port=5000, debug=True)
函数request.args.get的第二个参数用来设置默认值。此时在浏览器访问http://127.0.0.1:5000/,将显示:
welcome
getlist 如何处理多值
如果我们请求 http://127.0.0.1:5000/?name=Loen&age&app=ios&app=android,仔细看下,app有两个值。
如果我们的代码是:
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def hello_world():
r = request.args.get('app')
return r
if __name__ == '__main__':
app.run(port=5000, debug=True)
在浏览器中请求时,我们只会看到 ios。
我们可以使用getlist获取所有的app的值。
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def hello_world():
r = request.args.getlist('app') # 返回一个list
return str(r)
if __name__ == '__main__':
app.run(port=5000, debug=True)
浏览器输入 http://127.0.0.1:5000/?name=Loen&age&app=ios&app=android,我们会看到['ios', 'android']。