flask request获取raw参数_Flask进击篇(1)——Flask运行流程

782f9eac6804312d6e0f41d6cdc31312.png

一次完整的请求

在我们了解Flask运行流程之前,先看一下我们在浏览器一次请求中所经历的过程,下面这张是结合Flask的源码绘制的一张流程图

c65f2b20ab0a23f2e17014ebfd9ac64c.png

能看到Flask在一次请求中实际上只是做了最后一部分功能,这里没有将Flask的具体处理流程列出来,我们在下面会继续讲解。 在上图中出现WSGIRequestHandler,WSGI协议是在Python Web开发中很核心的部分,如果想继续进击的话,需要对这部分有深刻的理解。 这部分我在另一篇文章中有写到,如有需要可以查看

战渣渣:WEB开发——Python WSGI协议详解​zhuanlan.zhihu.com
802e0a0bbbc288bddc1df68efd944766.png

Flask处理流程

我所理解Flask要做的事情,是根据请求的HTTP协议中url和method映射相应的处理函数,处理完并返回。这是基础的功能,Flask在这基础上又增加了一些其他功能。下面我们就通过Flask的源码中一些属性来进行分析。

Flask部分重要属性

fcb5b62cceea069366b175f0369eb9c6.png

3f64ea9c06a9cc907f697c1200da0cee.png

Flask在启动时已将各属性根据需求配置好,但实际映射函数的属性就是view_functions,此属性类型为字典,key是endpoint。

endpoint可自定义,若不指定将会根据函数名生成,若出现重复的endpoint将会提示错误。

endpoint会与url和method统一封装成到rule放入到url_map中,在请求过来时会根据url和和method生成reuqest到url_map中匹配,如果匹配到则根据endpoint获取到相应的函数去执行,并将结果返回。这部分可以看Flask源码部分。

添加到url_map

# flask/app.py
    

请求时匹配请求

  1. 生成请求
# flask/app.py
    

此处是在生成上下文的push中执行会执行match_request,这里没有贴出来。 实质就是请求过来了,根据url和method匹配启动时的url_map,如果没有的话则返回匹配不到

  1. 匹配请求
# flask/app.py
    

根据上面从url_map得到的rule,然后根据endpoint取得要执行的函数。

Flask另外几个属性,则表示在请求之前和请求之后做一些处理,并且可以针对不同的blueprints来进行处理,关于blueprints我们等几个章节再细分析。

Flask的处理流程

Flask实际的处理流程是什么样子,先看一下Flask的源码

# flask/app.py

    

基本流程可以看的比较清晰,至于每个函数列表的来源以及作用,我在开始的属性图上已将其标识出来。

3c81e8540c029b2cc601fe6ad948ddf3.png

至此可以大体知道请求过来之后Flask是如何处理及前期Flask会构建哪些内容。

但Flask还有很多东西。例如我们经常使用request,current_app对象和常用的blueprints是怎么个原理。

下章节会针对Flask的上下文处理再做深入的理解。

加深交流联系看下方

666646843c5e856df780e2b898033530.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值