Я знаю, что на этот вопрос ответили, но на самом деле это более сложная вещь - запросы и ответы обрабатываются в обратном порядке.
вы можете думать об этом так:
- 0 - двигатель делает запрос
- 1..inf - вызовы промежуточного программного обеспечения process_request
- inf - происходит фактическая загрузка (если промежуточное ПО запроса не обработало его)
- инф..1 - вызовы промежуточного программного обеспечения process_resonse
- 0 - ответ, полученный двигателем
итак ... если я помечу свое промежуточное программное обеспечение как номер 1, это будет промежуточное программное обеспечение FIRST-запроса и промежуточное программное обеспечение LAST-ответа ... если мое промежуточное программное обеспечение как 901 будет выполнено промежуточное программное обеспечение LAST-запроса и промежуточное программное обеспечение FIRST-ответа выполняется (если определено только промежуточное ПО по умолчанию).
на самом деле ответ в том, что это сбивает с толку. начало запроса ближе всего к двигателю (в нуле), а конец запроса ближе всего к загрузчику (большое число). начало ответа является ближайшим к загрузчику (большое число), а конец ответа находится ближе всего к двигателю (в нуле). это как отключение и возврат из движка ... вот соответствующий код из scrapy, который делает все это таким забавным (с init , скопированным из MiddlewareManager для справки и включающим только соответствующий метод):
class DownloaderMiddlewareManager(MiddlewareManager):
def __init__(self, *middlewares):
self.middlewares = middlewares
self.methods = defaultdict(list)
for mw in middlewares:
self._add_middleware(mw)
def _add_middleware(self, mw):
if hasattr(mw, 'process_request'):
self.methods['process_request'].append(mw.process_request)
if hasattr(mw, 'process_response'):
self.methods['process_response'].insert(0, mw.process_response)
if hasattr(mw, 'process_exception'):
self.methods['process_exception'].insert(0, mw.process_exception)
Как видите, методы запроса добавляются в отсортированном порядке (большее число добавляется сзади), а методы ответа и исключения вставляются в начале (большее число идет первым).