路由
- 路由
- 关于路由
- 注册路由
- endpoint
- 作用
- 为什么要这样设计
- endpoint
-
- 继续分析
-
- 路由匹配
关于路由
所谓路由,就是处理请求URL和函数之间关系的程序
还是根据例子看源码
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'hello world!'
if __name__ == '__main__':
app.run()
Flask中也是对URL规则进行统一管理的,创建URL规则有两种方式:
1.使用@app.route修饰器,并传入URL规则作为参数,将函数绑定到URL,这个过程便将一个函数注册为路由,这个函数则被称为视图函数。
2.使用app.add_url_rule()。
注册路由
定位到@app.route修饰器,看看route是什么
def route(self, rule, **options):
def decorator(f):
endpoint = options.pop("endpoint", None)
self.add_url_rule(rule, endpoint, f, **options)
return f
return decorator
很明显,这是一个装饰器,route()有两个参数,rule表示url规则。
该函数对参数进行处理之后,调用方法add_url_role(),这里也就验证了两种注册路由的方法等价。
继续定位add_url_rule这个方法:
@setupmethod
def add_url_rule(
self,
rule,
endpoint=None,
view_func=None,
provide_automatic_options=None,
**options
):
....
1.首先这个方法传入的参数有这些:
- rule: url规则
- endpoint : 要注册规则的endpoint,默认是视图函数的名
- view_func 视图函数
- provide_automatic_options 请求方法是否添加OPTIONS方法的一个标志
- options: 关于请求处理的一些方法等
endpoint
这里着重介绍下endpoint, 中文意思是端点
flask 内部是先把URL地址映射到端点(endpoint)上,然后再映射到视图函数(view_func)
看一个例子: