本文主要讲每个中间件的方法的处理过程
process_request 专门处理request
process_response 专门处理response
process_exception 专门处理exception,这个exception可以是process_request process_response 抛出的错误,也可以是下载器抛出的错误
中间件的处理就相当于一个流程线
中间件一 --------------->中间件二 ---------------------> 中间件三 ---------------->下载器
process_request1----->process_request2------->process_request3
process_response1---->process_response2---->process_response3
process_exception1---->process_exception2---->process_exception3
process_request有四种返回值:
第一种是None,返回None的话会由其他中间件的process_request方法继续处理request,
第二种是Request,返回Request的话会从第一个中间件的process_request开始处理request
第三种是response,这样的话会从第一个中间件的process_response开始处理
第四种是raise一个IgnoreRequest,会从第一个中间件的process_exception开始处理
process_response有三种返回值
第一种是Response,这样会继续下一个中间件的process_response开始处理,注意是下一个而不是第一个
第二种是Request,这样会到第一个中间件的process_request进行处理
第三种是IgnoreRequest,这样会到第一个中间件的process_exception进行处理
注意没有None类型,也就是说不支持从头处理Response,如果Response出现错误想要重新处理,那就return Request
process_exception
第一种是None ,这样会进行下一个中间件的process_exception
第二种是Request,会由第一个中间件的process_request执行
第三种是Response,会有第一个中间件的process_response执行
流程图