Flask03.路由规则

2019-09-29  本文已影响0人  岐黄札记

给视图函数指定多个路由

flask允许通过在视图函数上方罗列多个@app.route装饰器给某个视图函数添加多种路由访问方式。

from flask import Flask

app = Flask(__name__)


@app.route('/hello')
@app.route('/hi')
def hi():
    return "你好啊!"


if __name__ == '__main__':
    print(app.url_map)
    app.run(debug=True)

如上例,给视图函数hi()添加两个路由装饰器,一个为/hello,一个为/hi,运行脚本后,可以在浏览器地址栏输入http://127.0.0.1:5000/hellohttp://127.0.0.1:5000/hi访问该视图函数:

http://127.0.0.1:5000/hello
http://127.0.0.1:5000/hi

代码倒数第二行的app.url_map为路由和视图函数的映射信息,该信息包含路由路径、访问方式、以及映射的视图函数等。本例代码运行后,输出的路由映射信息为:

Map([<Rule '/hello' (OPTIONS, HEAD, GET) -> hi>,
 <Rule '/hi' (OPTIONS, HEAD, GET) -> hi>,
 <Rule '/static/<filename>' (OPTIONS, HEAD, GET) -> static>])

指定路由访问方式

在给视图函数添加路由装饰器时,如果不指定访问方式则默认只能使用GET方式访问。当使用除GET方式外的其他请求方式调用该路由时,则返回405 Method Not Allowed

通过POST方式调用
如果需要更改为其他的请求方式,可以使用methods命名参数。该参数需要传入list的类型的字符串数据,如果仅需要支持POST请求类型,则methods=['POST']
from flask import Flask

app = Flask(__name__)


@app.route('/hello', methods=['POST'])
def hi():
    return "你好啊!"


if __name__ == '__main__':
    print(app.url_map)
    app.run(debug=True)

这里给hi视图函数的路由指定POST请求类型,通过postman以POST请求方式调用,可以看到不再返回405错误。

POST请求

不同的视图函数指定相同的路由

路由匹配视图函数有两个点:路径和请求方式。若给不同的视图函数指定相同的路由路径,且请求方式都能适配,则仅会匹配定义在前边的视图函数。

from flask import Flask

app = Flask(__name__)


@app.route('/hello')
def hi():
    return "你好啊!"


@app.route('/hello')
def hello():
    return "Say Hello"


if __name__ == '__main__':
    print(app.url_map)
    app.run(debug=True)

hi()hello()视图函数均指定路由路径为/hello,当通过postman访问http://127.0.0.1:5000/hello时,可以看到返回的时hi()视图函数的内容。

http://127.0.0.1:5000/hello

如果相同路由路径的视图函数,指定的请求方式不一样,则会按实际请求方式来匹配视图函数。如代码:

from flask import Flask

app = Flask(__name__)


@app.route('/hello', methods=['POST'])
def hi():
    return "你好啊!"


@app.route('/hello', methods=['PUT'])
def hello():
    return "Say Hello"


if __name__ == '__main__':
    print(app.url_map)
    app.run(debug=True)

hi()函数与hello()函数路由路径均为/hello,但一个指定POST请求类型,一个指定PUT请求类型。此时分别使用这两种访问方式访问:

POST请求 PUT请求

可以看到flask在相同路由路径情况下会按实际请求方式来匹配视图函数。

上一篇 下一篇

猜你喜欢

热点阅读