Параметр `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 будет поддерживать больше интерфейсов, то возможно, что для них также будет создан класс запроса.