如何从中间件中的 Django 请求对象获取视图中使用的模型名称?

Posted

技术标签:

【中文标题】如何从中间件中的 Django 请求对象获取视图中使用的模型名称?【英文标题】:How to get model name used in view from a Django request object in middleware? 【发布时间】:2021-04-24 20:44:10 【问题描述】:

我有一个 django 应用程序,我正在为其编写中间件。在中间件中,我有process_exception 函数,其中我有一个request 对象,它是一个WSGI Request 对象。

我想得到请求已经通过的视图。我该怎么做?

如果我尝试request.view,我会得到:

AttributeError: 'WSGIRequest' object has no attribute 'view'

我还想获得模型,在该视图中使用序列化程序,但当然我可以在获得视图后使用getattr 轻松做到这一点。

【问题讨论】:

可能有用的信息:***.com/questions/2491605/… 可能有用的信息:***.com/questions/46989848/… 可能有用的信息:***.com/questions/3081327/… 【参考方案1】:

虽然请求没有指示其视图的属性,但您可以按如下方式获取:

from django.urls import resolve

class MyMiddleware:
    def process_exception(self, request, exception):
        # code
        resolver_match = resolve(request.path_info)
        view_function = resolver_match.func # matching view function
        url_name = resolver_match.url_name # name of the matching url
        # code

参考文档resolve、ResolverMatch、attributes of HttpRequest (path_info)

【讨论】:

以上是关于如何从中间件中的 Django 请求对象获取视图中使用的模型名称?的主要内容,如果未能解决你的问题,请参考以下文章

如何向 Django 请求对象添加属性

django视图中的elif条件

如何在 Django 单元测试中获取请求对象?

使用中间件添加参数以查看 django 中的函数

如何从 django 中基于类的详细视图中获取当前对象/产品?

Django中非视图函数获取用户对象