注意:重写问题是因为过度简化导致了错误的示例代码。
要对此进行测试,请确保您在主机文件中包含以下设置:
test.local 127.0.0.1
subdomain.test.local 127.0.0.1
在settings.py中,将Cookie设置为跨子域工作:
SESSION_COOKIE_DOMAIN = '.test.local'
然后我有一块看起来像这样的中间件:
from django.contrib import messages
from django.http import HttpResponseRedirect
class AuthorizeAccount:
def process_request(self, request):
if request.get_host() != 'test.local:8000':
messages.error(request, u'No subdomain!')
return HttpResponseRedirect('http://test.local:8000/')
return None
我的模板包含:
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
您可以转到开发服务器上的http://test.local:8000(预计没有消息)并转到http://subdomain.test.local:8000(期望重定向到http://test.local:8000并发送消息)来测试这一点。
我确实得到了重定向但我没有收到消息。我错过了什么或者这是一个错误吗?
答案 0 :(得分:2)
消息通过会话与用户相关联。但会话ID存储在cookie中 - 而cookie是特定于域的。然而,中间件的重点是从一个域重定向到另一个域。重定向后,用户将在新域上获得新的cookie。
换句话说,这不可能像现在一样有效。唯一的选择是将某些内容放入重定向请求的GET参数中。