Инфраструктура сообщений Django, пользовательское промежуточное ПО и HttpResponseRedirect - PullRequest
1 голос
/ 04 января 2011

ПРИМЕЧАНИЕ: переписал вопрос из-за упрощения, которое привело к неверному примеру кода.

Чтобы проверить это, убедитесь, что у вас есть следующие настройки в вашем файле hosts:

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 и сообщение) .

Я получаю перенаправление, но не получаю сообщение. Я что-то упустил или это ошибка?

1 Ответ

2 голосов
/ 04 января 2011

Сообщения связаны с пользователем через сеанс.Но идентификатор сеанса хранится в файле cookie, а файлы cookie зависят от конкретного домена.Однако весь смысл вашего промежуточного программного обеспечения заключается в перенаправлении с одного домена на другой.После перенаправления пользователь получит новый файл cookie на новом домене.

Другими словами, это не может работать так, как у вас сейчас.Единственной альтернативой было бы поместить что-то в параметры GET перенаправленного запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...