问题标签 [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.
django - 使用多主机中间件测试 django 页面
背景:我正在使用中间件django-multihost
(http://effbot.org/zone/django-multihost.htm) 允许我的单个 django 应用程序响应来自同一项目的不同主机名。中间件根据HTTP请求头 改变ROOT_URLCONF
(即哪个文件)。urls.py
Host:
这很好用,但我想编写一些简单的集成测试来检查页面是否正确加载。下面是一个基本测试示例,用于检查/trends
页面是否加载以及是否包含“今日趋势”文本:
问题是,这总是使用默认的 ROOT_URLCONF 加载,而不是中间件调用的那个。如果我明确地将主机名放入 url 中,则无关紧要client.get("http://secondarysite/trends")
。
如何使用 django 测试客户端在其他虚拟站点上进行测试?我想在测试中调用中间件,以便测试该逻辑。但是如果我需要我会在测试期间做一些像设置 ROOT_URLCONF 这样的骇人听闻的事情,但我不知道该怎么做。
django - Django:创建/修改请求对象
我正在尝试构建一个 URL 别名应用程序,该应用程序允许用户为其网站中的现有 URL 创建别名。
我正在尝试通过中间件来执行此操作,其中request.META['PATH_INFO']
检查了别名的数据库记录:
但是,要使其正常工作,(至少)将 PATH_INFO 更改为目标路径至关重要。
现在有一些片段允许开发人员创建测试请求对象(http://djangosnippets.org/snippets/963/,http://djangosnippets.org/snippets/2231/),但这些声明它们的目的是测试目的。
当然,这些片段可能适合在实时环境中使用,但我对 Django 请求处理的了解太不成熟,无法评估这一点。
python - Django:在中间件中检索会话或 cookie
我可以在中间件中获取当前会话或 cookie 吗?
我试过了,但我得到了:
django - 响应发送到客户端后在 Django 中执行代码
在我的 Django 应用程序中,我想跟踪是否已成功向客户端发送响应。我很清楚,在 HTTP 这样的无连接协议中没有“无懈可击”的方式来确保客户端已收到(并显示)响应,因此这不是关键任务功能,但我仍然想在最晚可能的时间。响应不会是 HTML,因此来自客户端的任何回调(使用 Javascript 或 IMG 标记等)都是不可能的。
我能找到的“最新”钩子是在中间件列表的第一个位置添加一个实现 process_response 的自定义中间件,但据我了解,这是在构建实际响应并将其发送到客户端之前执行的。响应成功发送后,Django 中是否有任何钩子/事件来执行代码?
jquery - 使用 jQuery/Javascript 在 Django 中保留显示/隐藏部分的状态
我有一个带有一些显示/隐藏部分的表格。当我在我的主页表单中按下一些按钮时,将显示不同的表单。在我编辑这些表格中的信息后,我将返回第一个表格。但是显示/隐藏部分的状态被重置。显示/隐藏操作是使用 jquery 切换完成的。这些部分的状态需要在返回时保持。所以我正在考虑将每个部分的状态存储在会话变量中。您还有其他解决方案吗?将这种行为放在单独的地方会更好还是可能会更好,例如在中间件中?
django - 如何在 django 应用程序中使用多个平面模型?
我有多个可以转换为平面页面的模型,但必须有一些额外的信息(例如,我有一个关于我们的页面,但我也有一个博客)。
但是我知道必须只有一个平面模型,因为中间件只返回平面实例并且不解析子模型。
我需要做什么?
编辑:
看来我需要改变观点。
这是当前代码:
django - Django 消息框架、自定义中间件和 HttpResponseRedirect
注意:由于过度简化导致示例代码错误,因此重写了问题。
要对此进行测试,请确保您的主机文件中有以下设置:
在 settings.py 中,将 cookie 设置为跨子域工作:
然后我有一个看起来像这样的中间件:
我的模板包含:
您可以通过访问您的开发服务器上的http://test.local:8000(不希望有消息)和访问http://subdomain.test.local:8000(希望重定向到http://test .local:8000和一条消息)。
我确实收到了重定向,但我没有收到消息。我错过了什么还是这是一个错误?
python - 如何调用函数并形成返回对象以在我的设置文件中使用?
我有一些中间件需要一个元组(用户名......它只允许元组中的用户名通过网站的某些区域)。
我有一个 UserProfile 模型,其中包含有关每个用户的信息,我想对其进行过滤,以便它返回一个用户名元组以供此中间件使用——换句话说,设置一个变量 BETA_USERS = (dynamically-generated-tuple)。
你有什么建议来完成这个吗?
编辑:
所以,元组真的不是一个重要的细节——这里有一个例子:
通常,我会将其硬编码到设置中:
但是,我有一个包含 Beta 列的 UserProfile 模型,可以将其设置为 1。注册 Beta 的前 50 人将设置为 1,其他人设置为 0。因此,我可以通过调用模型对象上的过滤器方法:
我可以用这个奇怪的小循环把它变成一个很好的元组:
我想我真正的问题是,在我的设置文件中调用它的最佳方式是什么?
或者,换一种说法,在设置文件中分配动态创建的变量的最佳方法是什么?
django - Django MiddleWare 订购的实用规则?
官方文档有点乱:'before' & 'after' 用于在元组中对 MiddleWare 进行排序,但在某些地方 'before'&'after' 指的是请求-响应阶段。此外,“应该是第一个/最后一个”是混合的,不清楚哪个用作“第一个”。
我确实理解其中的区别。但是对于 Django 的新手来说,这似乎很复杂。
您能否为内置的 MiddleWare 类推荐一些正确的顺序(假设我们启用了所有这些类)并且——最重要的是——解释为什么一个在其他类之前/之后?
这是列表,其中包含我设法找到的文档中的信息:
UpdateCacheMiddleware
- 在那些修改 'Vary:'
SessionMiddleware
,GZipMiddleware
,LocaleMiddleware
- 在那些修改 'Vary:'
GZipMiddleware
- 在任何可能更改或使用响应体的 MW 之前
- 之后
UpdateCacheMiddleware
:修改“变化:”
ConditionalGetMiddleware
- 之前
CommonMiddleware
:使用它的“Etag:”标头时USE_ETAGS=True
- 之前
SessionMiddleware
- 之后
UpdateCacheMiddleware
:修改“变化:” - 之前
TransactionMiddleware
:我们这里不需要交易
- 之后
LocaleMiddleware
, 最顶层之一,仅次于SessionMiddleware、CacheMiddleware- 之后
UpdateCacheMiddleware
:修改“变化:” - 之后
SessionMiddleware
:使用会话数据
- 之后
CommonMiddleware
- 在任何可能改变响应的 MW 之前(它计算 ETags)
- 之后
GZipMiddleware
它不会计算压缩内容的电子标签 - 靠近顶部:它在
APPEND_SLASH
或时重定向PREPEND_WWW
CsrfViewMiddleware
- 在任何假定 CSRF 攻击已被处理的视图中间件之前
AuthenticationMiddleware
- 之后
SessionMiddleware
:使用会话存储
- 之后
MessageMiddleware
- After
SessionMiddleware
:可以使用基于Session的存储
- After
XViewMiddleware
TransactionMiddleware
- 在使用 DB 的 MW 之后:(
SessionMiddleware
可配置为使用 DB) - 全部
*CacheMiddleWare
不受影响(作为一个例外:使用自己的 DB 游标)
- 在使用 DB 的 MW 之后:(
FetchFromCacheMiddleware
- 在那些修改'Vary:'的那些之后,如果使用它们为缓存哈希键选择一个值
- 之后
AuthenticationMiddleware
可以使用CACHE_MIDDLEWARE_ANONYMOUS_ONLY
FlatpageFallbackMiddleware
- 下:最后的手段
- 但是,使用 DB 不是问题
TransactionMiddleware
(是吗?)
RedirectFallbackMiddleware
- 下:最后的手段
- 但是,使用 DB 不是问题
TransactionMiddleware
(是吗?)
(我会将建议添加到此列表中,以便将所有建议收集在一个地方)
django - Django process_view 中间件导致 403 被禁止
我编写了一小部分中间件,可以捕获用户是否使用临时密码,如果是,则将他们重定向到强制他们创建新密码的页面。我的问题是,当用户登录并且不使用临时密码(即他们手动转到更改密码 URL)时,页面可以正常工作,但是当他们使用临时密码时,来自中间件的重定向会产生 403 Forbidden 页面.
在临时密码检查之后,中间件在 process_view 中做了另一件事,但这是相关代码:
请注意,可以使用像 render_to_response 之类的方法直接渲染模板来解决问题,但这会导致浏览器的 URL 无法跟随,并且无法真正退出它渲染的页面。