问题标签 [django-middleware]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
515 浏览

django - Django:中间件信号监听器可以操纵请求对象吗?

所以基本上,我想要一个中间件来连接一个向请求对象添加东西的信号监听器。然后可以将此信息包含在响应中。我目前有这个:

问题是,我看不到我在监听器中附加的东西。那怎么办?

最终,侦听器应该注册并行任务,这些任务可能会或可能不会及时完成,以便在渲染之前将它们添加到响应中。

编辑- 片段中的引号

0 投票
3 回答
6169 浏览

django - django 中的上下文处理器与中间件

在我看来,上下文处理器可以做的所有事情,中间件都可以做。那么上下文处理器的意义何在?它们只是中间件精简版吗?

0 投票
1 回答
115 浏览

django - 在 Django 启动时覆盖模块方法

我使用django.contrib.messages模块来创建刷新消息。这些消息可以显示在页面上的不同块中,取决于额外的标签:

我有名为“全局”的默认标签,如果没有设置额外标签,我需要将其添加到新消息中。所以我写了中间件来包装django.contrib.messages.add_message()应用程序启动的方法:

我看到init_messages()调用了该方法,但是当我调用 时django.contrib.messages.add_message(),它没有用add_message_wrapper().

我的失败在哪里?

0 投票
0 回答
150 浏览

django - Django app_cache_ready 方法在 Dev 上返回 True,在生产上返回 False

我不知道可能是什么原因。

在我的开发机器上,完全相同的 django 项目运行正常,而在自定义中间件代码 app_cache_ready() 方法的生产中始终返回 False。如果我忽略并绕过它,cache.set 不会缓存对象。

我的开发环境使用 runserver 来启动服务器,而生产环境使用带有 virtualhost 指令的 Apache 和 mod_wsgi。

有谁知道可能是什么问题?我已经花了几个小时没有成功。

提前致谢

下面是再次缓存失败的简化代码:

在随后的调用中,我总是看到缓存键不可用。

0 投票
1 回答
779 浏览

django - 为什么编写我自己的 MiddleWare 会使我的 Django 应用程序崩溃?

我想在我的应用程序中的任何视图加载之前运行一个函数,所以我编写了自己的中间件。它位于文件夹“my_app_name”中一个名为“DoBeforeMiddleWare.py”的文件中,现在看起来像

我尝试将此函数放在 settings.py 中的中间件列表中:

但是,我重新启动乘客后,我的应用程序永远不会加载。为什么?如果我注释掉 |MIDDLEWARE_CLASSES| 的最后一行,我的应用程序就会加载。

0 投票
1 回答
128 浏览

python - 这是一个 wsgi 中间件吗?

我以为我理解了 WSGI 规范。所以我正在查看这个 Django 模块https://github.com/django/django/blob/master/django/middleware/locale.py我只是不明白它是如何实现 wsgi 中间件的,正如 pep0333 解释的那样它。

我期待在某处签名,例如

以及一个调用另一个应用程序并处理其返回值的小例程。

有人能解释一下服务器位在哪里,这个中间件中的应用程序在哪里吗?

0 投票
1 回答
96 浏览

python - 计算完全呈现的请求

我对 Django 并不陌生(1 年的工作经验),但我有一个奇怪的任务,我无法处理。因此,我必须编写中间件来计算请求,但仅限于那些未被客户端中止的请求(那些在浏览器中完全呈现的请求)。

我发现当客户端中止连接时,服务器(Python)会抛出 errno 32 Broken Pipe,因为它来自对套接字的不成功写入[我认为连接服务器-客户端是 TCP,所以这并不奇怪]。

但问题是我找不到检查浏览器是否完全呈现页面或检查是否发生错误的方法(当然,该错误可能有其他来源,但这将是一个好的开始)。

哦,我不想使用 JS(使用 JS 是小菜一碟),但我可以使用 HTML5(如果它可以帮助...)

0 投票
2 回答
7172 浏览

django - Django:如何在中间件中访问 session_key

我无法访问session_key我的自定义 Django 中间件。我尝试使用以下方式访问它:

或者

我得到错误:

我已将中间件放在文件的末尾和MIDDLEWARE_CLASSES之后。django.contrib.sessions.middleware.SessionMiddlewaresettings.py

我可以在中间件中设置会话密钥,但似乎 session_key 仅在显示完整页面后才生成/可访问。因为当页面第一次显示时{{ request.session.session_key }}返回None到我的模板中。当我刷新页面时,我可以看到session_key. 任何关于我如何访问的提示session_key都非常受欢迎。

0 投票
1 回答
935 浏览

django - 需要 Django 中间件登录

我正在尝试根据此处找到的信息实施站点范围的登录限制:

我已经创建了login_required_middleware.py

我已将以下内容添加到我的 MIDDLEWARE_CLASSES 中settings.py

当我在浏览器中刷新时,我收到错误:

我接下来要去哪里?

0 投票
1 回答
214 浏览

database - 是否有一种数据库密集度较低的方法可以从我的扩展 Django Site 模型中获取数据?

我运行一个站点,除了与给定站点相关联的对象的名称和显示之外,它在许多 URL 上运行相同。因此,我扩展了 Site 模型以包含有关站点的各种其他信息,并创建了一个中间件来将标准 Site 对象信息放入请求对象中。以前,我在请求对象中需要的唯一信息是站点名称,我可以从 Django 提供的站点模型中获得。我现在需要一些位于我的扩展站点模型中的信息(以前仅由我的其他各种应用程序模型使用)。

这从向每个页面 ( request.site = Site.objects.get_current()) 添加一个查询到添加两个,因为我需要获取当前站点,然后从我的模型中获取关联的扩展站点对象。

有没有办法在不使用两个查询的情况下获取这些信息?或者甚至不使用一个?

模型.py:

中间件.py:

在我的settings.py文件中,我拥有所有共享的配置数据。我的服务器实例(gunicorn)配置为 load [site]_settings.py,它包含所有特定于站点的设置(包括 Django 的SITE_ID),并在底部:

我正在寻找不包括引用硬编码的选项(如果存在SITE_ID[site]_settings.py

更新:

正如下面所建议的,子类对象应该仍然可以访问它们的父对象和所有父对象的功能。对于 Site 对象,奇怪的是,情况似乎并非如此。