Flask源码分析(二)

    xiaoxiao2021-03-25  167

    源码分析

    上接Flask源码分析(一),本节内容主要包括预处理、后处理

    预处理,后处理

    在上文hello_world例子基础上做一些修改,增加预处理和后处理函数声明

    import flask app = flask.Flask(__name__) #新增加预处理 @app.before_request def before_req(): print "before req" @app.route("/") def hello(): return "hello world" #新增加后处理 @app.after_request def after_req(response): print "after req, status_code %s" % response.status_code return response if __name__ == "__main__": app.run()

    预处理和后处理逻辑基本一致,先看预处理。 flask.py

    def before_request(self, f): """Registers a function to run before each request.""" self.before_request_funcs.append(f) return f

    初始化app时将before_request_funcs置为空列表,声明before_req函数时,修饰器其实做的是

    before_req = before_request(before_req)

    将before_req添加到预处理函数列表中

    执行时,在上节中提到过的wsgi_app中提到的preprocess_request

    def wsgi_app(self, environ, start_response): with self.request_context(environ): #预处理逻辑 rv = self.preprocess_request() #分发逻辑,上节已分析 if rv is None: rv = self.dispatch_request() response = self.make_response(rv) #后处理逻辑 response = self.process_response(response) return response(environ, start_response) def preprocess_request(self): for func in self.before_request_funcs: rv = func() if rv is not None: return rv

    这部分很简单,就是遍历before_request_funcs列表并执行

    转载请注明原文地址: https://ju.6miu.com/read-1337.html

    最新回复(0)