Flask之Flask类

来源:互联网 发布:管道绘图软件 编辑:程序博客网 时间:2024/06/05 06:48

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

from flask import Flask    app = Flask(__name__)    @app.route("/")    def index():        passif __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)




原创粉丝点击