Flask之Flask类

使用Flask框架时,Flask是首要入口,使用方法类似下面:

from flask import Flask
    app = Flask(__name__)
    @app.route("/")
    def index():
        pass

if __name__ == '__main__':
    app.run(debug=True)

Flask.run()方法核心就是werkzeug库的run_simple()方法,请参考另外一篇文章分析

Flask类定义如下图所示:


其中,方法wsgi_app是由HTTPServer进行回调的方法,由另外文章分析可知,HTTPServer套接字有网络请求时,最终会调用到到这个方法,所以这里是Flask处理的核心

    def wsgi_app(self, environ, start_response):
        ctx = self.request_context(environ)
        ctx.push()
        error = None
        try:
            try:
                response = self.full_dispatch_request()
            except Exception as e:
                error = e
                response = self.handle_exception(e)
            except:
                error = sys.exc_info()[1]
                raise
            return response(environ, start_response)
        finally:
            if self.should_ignore_error(error):
                error = None
            ctx.auto_pop(error)
首先,生成一个请求下上文对象,该对象保存了Flask实例、环境信息

其次,上下文对象放入公共栈中,这个栈以协程/线程ID隔离。

然后,处理该请求且没有一次发生,则生成一个Response返回

以上就是处理的基本框架。还有很多细节需要逐步分析才能明了


处理请求过程中,会依次执行before_first_request_funcs--》url_value_preprocessors--》before_request_funcs--》view_functions--》after_request_funcs列表中的函数。

before_first_request_funcs:初始化为空列表[],用户自定义方法时,直接将函数添加到列表中。函数类型def func()

url_value_preprocessors:初始化为空字典{},用户添加自定义方法时,url_value_preprocessors值变为{None: []},所有的方法都添加到None数组中。方法类型为:def func(endpoint, *args)

before_request_funcs:初始化为空字典{},用户添加自定义方法时,before_request_funcs值变为{None: []},所有的方法都添加到None数组中。方法类型为def func()

after_request_funcs:初始化为空字典{},用户添加自定义方法时,after_request_funcs值变为{None: []},所有的方法都添加到None数组中。方法类型为def func(response)




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值