美文网首页
Flask03.路由规则

Flask03.路由规则

作者: 岐黄札记 | 来源:发表于2019-09-29 16:07 被阅读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在相同路由路径情况下会按实际请求方式来匹配视图函数。

相关文章

  • Flask03.路由规则

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

  • thinkphp5学习笔记(三)路由配置

    URL请求的执行流程 路由模式 路由注册 路由规则 路由地址 路由参数 变量规则 路由分组 别名路由 路由绑定

  • 22、TP5常用的路由地址类型

    路由地址,是用户最终要访问的URL,也是路由规则的目标地址,它不像路由规则,可以通过路由参数和变量规则进行检验,所...

  • ThinkPHP基础-----第五章(路由相关)第三部分

    1、变量规则: 2、路由参数: 3、资源路由 5、快捷路由:

  • 路由嵌套(二级路由)

    使用路由规则的children属性实现子路由。 子路由规则的path属性不要以斜线/开头,这样会表示永远以此根路径...

  • vue-router基本使用

    安装 使用路由,引入路由规则 main.js文件 配置路由规则,在文件夹router新建文件index.js这个文...

  • Vue-router 路由 (常见用法)

    vue-router 的常见用法 一个完整的路由必须包含:路由链接和路由占位符、路由实例、路由规则链接的路由组件 ...

  • ThinkPHP5路由

    路由作用 1.根据实现定义的路由规则,检验URL请求,确定执行或者拒绝; 2.路由规则可自定义,隐藏了原URL地址...

  • Service Mesh - Istio流量控制篇(上)

    动态路由:用Virtual Service和Destination Rule设置路由规则 路由这个功能是流量控制里...

  • 路由独享路由守卫、组件路由守卫

    路由独享路由守卫 index.js 只对某个路由进行权限限制,可以在路由规则里面单独配置权限,使用beforeEn...

网友评论

      本文标题:Flask03.路由规则

      本文链接:https://www.haomeiwen.com/subject/buczyctx.html