【问题标题】: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)