Параметр `request` в Django - HTTPRequest или WSGIRequest

Вся документация Django говорит, что request имеет тип django.http.request.HTTPRequest. Я использую NGINX -> Waitress WSGI в своей разработке, и я вижу, что request - это django.core.handlers.wsgi.WSGIRequest, который наследуется непосредственно от HTTPRequest. Я понимаю, что Django должен всегда работать под WSGI, если так, то запрос всегда будет WSGIRequest. Так почему же в документации Django всегда используется HTTPRequest?

Запрос в Django не всегда будет WSGIRequest. В настоящее время Django поддерживает два интерфейса: Web Server Gateway Interface (WSGI) и Asynchronous Server Gateway Interface (ASGI), и может быть развернут с любым из них. Им соответствуют классы django.core.handlers.wsgi.WSGIRequest и django.core.handlers.asgi.ASGIRequest.

В зависимости от того, как развернут Django, запрос будет представлять собой экземпляр одного из них. Оба эти класса наследуются от HttpRequest, так что Django как фреймворк может предоставлять пользователям общий тип объектов. Если в будущем Django будет поддерживать больше интерфейсов, то возможно, что для них также будет создан класс запроса.

Вернуться на верх