列出所有的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

浏览器将显示:我爱你

这是因为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']。

最后修改:2022 年 12 月 05 日
如果觉得我的文章对你有用,请随意赞赏