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

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

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

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

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

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

【问题讨论】:

标签: django django-rest-framework middleware


【解决方案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)

【讨论】:

    猜你喜欢
    • 2012-08-30
    • 2017-09-06
    • 2013-11-21
    • 1970-01-01
    • 2011-09-28
    • 2019-11-19
    • 2020-07-04
    • 2011-06-19
    • 2021-02-14
    相关资源
    最近更新 更多