flask一次request请求过程 基于tag0.2和0.3

前言:

    在tag为0.2和0.3的版本中,flask的一次request请求过程没有发生太大的改变。


增加的内容:

    1·tag为0.2版本中 增加模块化的支持,应该就是blueprint的前身。目的也是为了更好的管理大型项目。

例如:

app = Flask(__name__)
app.register_module(admin, url_prefix='/admin')
app.register_module(frontend)

就注册了两个模块。针对模块主要区别有:

  1. module的url会默认添加url_prefix
  2. 有模块专属的 before_request, context_precessor等函数
 def register_module(self, module, **options):
        options.setdefault('url_prefix', module.url_prefix)
        state = _ModuleSetupState(self, **options)
        for func in module._register_events:
            func(state)

register_module函数中主要是对module的一些函数进行调用,例如注册路由,注册before_request函数等。

    def preprocess_request(self):
        funcs = self.before_request_funcs.get(None, ())
        mod = request.module
        if mod and mod in self.before_request_funcs:
            funcs = chain(funcs, self.before_request_funcs[mod])
        for func in funcs:
            rv = func()
            if rv is not None:
                return rv

preprocess_request函数中将module的before_request函数chain起来一并执行


    2.增加了logger模块

 def logger(self):
        from logging import getLogger, StreamHandler, Formatter, DEBUG
        class DebugHandler(StreamHandler):
            def emit(x, record):
                if self.debug:
                    StreamHandler.emit(x, record)
        handler = DebugHandler()
        handler.setLevel(DEBUG)
        handler.setFormatter(Formatter(self.debug_log_format))
        logger = getLogger(self.import_name)
        logger.addHandler(handler)
        return logger

   3.还有很好用得 jsonify函数。RESTFul中经常需要使用到这个函数

   4.可以在with语句内手动压入或者弹出request_context了。得益于_RequestContext添加了poppush函数。而且在shell中不需要with语句就可以使用request_context了,在测试的时候十分方便

ctx = app.test_request_context()
ctx.push()
request.path
ctx.pop()

   

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值