flask动态添加路由,python flask 路由
通常有以下几种定义路由函数的方法:
1.使用烧瓶Flask.route()修饰器。
2.使用烧瓶Flask.add_url_rule()函数。
3.直接访问基于工具路由系统的烧瓶Flask.url_map .
一 、让我们从最常用的@app.route()修饰器开始。
取消路由(自身,规则,* *选项):
定义装饰器:
endpoint=options.pop(endpoint ,无)
self.add_url_rule(规则,端点,f,* *选项)
returnf
返回装饰器可以看到修饰器是对添加全球资源定位器(Uniform Resource Locator)规则函数的包装,当我们写如下代码时:
@app.route(/index.html )
定义索引():
回到你好的世界!实际上上面的代码转换成:
定义索引():
回到你好的世界!
指数=app。路由(/index。html )(索引)也就是,rule=/index.html ,options={ },执行装饰者(索引)时会执行self.add_url_rule(规则,端点,f,* *选项)
二、下面回过头,来看看当瓶运行时,一个请求来了,会发生什么,仍然从Flask.wsgi_app开始阅读。
已经知道,当一个请求到来时,会首先推送请求上下文和AppContext,在请求上下文中的初始化函数中有:
.自我。URL _ adapter=app。create _ URL _ adapter(自身。请求)
.自我。match _ request()def create _ URL _ adapter(self,request): ifrequestisnotnone :
回归自我。URL _ map。绑定到环境(请求。包围
服务器名称=自身。配置[服务器名称])
.首先将Flask.url_map与当前到来的请求中包围进行绑定,获得一个url _适配器。
defmatch_request(self):
尝试:
url_rule,self.request.view_args=
自我。URL _适配器。match(return _ rule=True)
self.request.url_rule=url_rule
exceptHTTPExceptionase:
自我。请求。routing _ exception=e获得url _适配器之后,调用match_request,url_adapter.match()会返回一个元组view_args就是url _规则中的参数,比如规则(/int:year/,endpoint=blog/archive )这个规则,而请求是/2016/,那么view_args={year: 2016} .url _规则和view_args被储存在请求中。在请求类中,我们可以直接请求。端点将返回url_rule。端点。
在url _规则和view_args被装载到请求中后,我们继续对wsgi_app中的回应=自我。完整分派请求()这个过程与路由相关的内容进行分析。
def full _ dispatch _ request(自身):自身。try _ trigger _ before _ first _ request _ functions()try :
请求_启动.发送(自身)
RV=自我。预处理请求()ifrvisnone :
rv=self.dispatch_request()
.调度请求()处理完毕,将返回值储存在轮状病毒变量中。通常,视图函数会返回渲染模板(.).返回值接下来经过一系列处理,发送到客户端。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。