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,你现在可以启动试试,如果没有意外的话你会看到和上面方法一样的效果。
祝你成功,我们下一节再见。