中间件中的 Django 请求对象?

Django Request Object in middleware?

我正在构建自定义 Prometheus 中间件 class 来进行一些监控,我想为中间件中的给定请求构建或检索 Django Rest Framework Request 对象,以便我可以在我的指标中捕获 request.version

但是,我下面代码中的 request 参数似乎是一个 WSGIRequest 对象。是否可以在中间件中识别 DRF HttpRequest 对象?下面的代码...

if django.VERSION >= (1, 10, 0):
   from django.utils.deprecation import MiddlewareMixin
else:
   MiddlewareMixin = object

class CustomPrometheusAfterMiddleware(MiddlewareMixin):

   def process_response(self, request, response):
       # Do some cool things
       return response

如果你 check the source code,Django 的 HttpRequest 对象被包装在 views.APIView.dispatch 中 DRF 的 Request 对象中,所以我认为你将不得不经历很多困难为拿到它,为实现它。你最好的选择可能是修补 APIView 以存储你在真实请求(Django 的 HttpRequest 或子类)之后的信息 - 或者响应 FWIW - 这样你就可以将它们取回中间件。