【问题标题】:Django Request Object in middleware?中间件中的 Django 请求对象?
【发布时间】:2017-10-31 14:35:42
【问题描述】:

我正在构建一个自定义 Prometheus 中间件类来进行一些监视,我想为中间件中的给定请求构建或检索 Django Rest Framework Request 对象,以便我可以在我的指标。

但是,我下面代码中的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

【问题讨论】:

  • @Alasdair 我首先要发表相同的评论,但 OP 想要的是 DRF 的 Request 对象。
  • 中间件类的顺序是什么?可以发一下吗?

标签: python django django-rest-framework prometheus


【解决方案1】:

如果你 check the source code,Django 的 HttpRequest 对象被包裹在 DRF 的 Request 对象中 views.APIView.dispatch 中,所以我认为你必须经过很多圈才能得到它。您最好的选择可能是修补 APIView 以存储您在真实请求(Django 的 HttpRequest 或子类)或响应 FWIW 上的信息,这样您就可以将它们恢复到中间件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    相关资源
    最近更新 更多