获取url参数

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

你可能感兴趣的:(获取url参数)