(4)Flask 路由

Flask 路由

现代Web框架使用路由技术来帮助用户记住应用程序URL。可以直接访问所需的页面,而无需从主页导航。

Flask中的route()装饰器用于将URL绑定到函数。例如:

# -*- coding:utf-8 -*-
from flask import Flask

app = Flask(__name__)

@app.route('/hello')
def hello():
    return 'hello world'

if __name__ == '__main__':
    app.run()

下面讲讲app.route了,这是一个装饰器,它包裹了你的路由,等同于add_url_rule方法

我们也可以使用以下代码来调用

# -*- coding:utf-8 -*-
from flask import Flask

app = Flask(__name__)

def hello():
    return 'hello world'

app.add_url_rule('/', view_func=hello)

@app.route('/index',methods=['GET'])
def index():
    return 'this is index site'

if __name__ == '__main__':
    app.run()

我们还是从源码的角度来剖析其中的methods是怎么来的。下面只讲关键的一部分代码 :

methods = options.pop("methods", None)

if methods is None:
    methods = getattr(view_func, "methods", None) or ("GET",)
methods = set(item.upper() for item in methods)

首先他从options参数里面去找methods这个key,如果没有 ,它又会去view_func这个对象里面去找methods,没有的话,那么久默认为GET了。

后面一句的upper告诉我们,我们的items是一个generator,这里我们使用了列表来放置我们这个相关路由的所有方法,当然你也可以类似(x for x in ['get','post'])然后呢,最后都会自动帮我们转换为大写字母。

methods |= required_methods

在源码中,我们最后看到了一句精髓代码 。

这里要说一下,methods和required_methods在之前都变成了2个集合

这里的目的可是取并集哟,并将并集结果重新赋值给methods。

OK,你现在可以启动试试,如果没有意外的话你会看到和上面方法一样的效果。

祝你成功,我们下一节再见。

发布了62 篇原创文章 · 获赞 36 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/louishu_hu/article/details/103135546
今日推荐