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对象,所以不管怎么样都得返回