Flask源码分析(二)

源码分析

上接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列表并执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值