flask动态添加路由,python flask 路由

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: