Django - 如何访问视图之外的请求对象?

Posted

技术标签:

【中文标题】Django - 如何访问视图之外的请求对象?【英文标题】:Django - How do I access request object outside views? 【发布时间】:2017-04-06 17:13:18 【问题描述】:

我在app 目录中有一个名为utilities.py 的文件,其中包含特定于我的应用程序的小实用程序功能。我将从views.py 调用这些函数。问题是某些实用程序函数需要访问request 对象。

有没有办法在视图之外使用request 对象而不将其作为参数传递给实用函数?

【问题讨论】:

不要这么认为...... 你为什么不想使用参数? 我想更改一些遗留代码,并将请求作为参数传递,需要大量工作吗?有没有其他办法? 找到并实施一种解决方法,这样您就不必使用参数,这也需要大量工作,并最终导致更糟糕的解决方案。 【参考方案1】:

我已经自定义了 Context 类,我在 Django 中间件中对其进行了初始化,并将链接放入 request 对象。

两件重要的事情:

    Context 类必须继承 threading.local 以防止在多线程中运行应用时请求泄漏。 将Context 设为单例。为此,我使用了 Singleton 元类。

所以,这样做你可以在代码的任何部分简单地通过这个调用来获取 Django 请求对象:

request = Context().request

【讨论】:

以上是关于Django - 如何访问视图之外的请求对象?的主要内容,如果未能解决你的问题,请参考以下文章

9.13 视图层之请求对象和响应对象

Django DRF - 视图集中的补丁请求对象?

Django:如何在查看请求之外获取已登录的用户?

Django框架之视图

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

Django之视图函数总结