美文网首页
Flask中after_request的一个坑

Flask中after_request的一个坑

作者: Allennnnnnn | 来源:发表于2019-01-07 23:24 被阅读0次

    flask的after_request函数一定要返回response

    即使你没有对response做任何处理

    你只有一个after_request函数的时候不会出现问题,一旦一些插件用到了after_request多半就会报错,类似于None type has no attribute xxx这样。

    为什么

    flask处理after_request是在下面这个方法里面,在app.py

        def process_response(self, response):
            """Can be overridden in order to modify the response object
            before it's sent to the WSGI server.  By default this will
            call all the :meth:`after_request` decorated functions.
    
            .. versionchanged:: 0.5
               As of Flask 0.5 the functions registered for after request
               execution are called in reverse order of registration.
    
            :param response: a :attr:`response_class` object.
            :return: a new response object or the same, has to be an
                     instance of :attr:`response_class`.
            """
            ctx = _request_ctx_stack.top
            bp = ctx.request.blueprint
            funcs = ctx._after_request_functions
            if bp is not None and bp in self.after_request_funcs:
                funcs = chain(funcs, reversed(self.after_request_funcs[bp]))
            if None in self.after_request_funcs:
                funcs = chain(funcs, reversed(self.after_request_funcs[None]))
            for handler in funcs:
                response = handler(response)
            if not self.session_interface.is_null_session(ctx.session):
                self.session_interface.save_session(self, ctx.session, response)
            return response
    

    问题就在这两句

    funcs = ctx._after_request_functions
    for handler in funcs:
            response = handler(response)
    

    所有after_request依次处理一个response对象,所以不管怎么样都得返回

    相关文章

      网友评论

          本文标题:Flask中after_request的一个坑

          本文链接:https://www.haomeiwen.com/subject/cormrqtx.html