1

注:単純化しすぎてサンプルコードが不適切になったため、質問を書き直しました。

これをテストするには、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とメッセージ)。

リダイレクトは表示されますが、メッセージが表示されません。何か不足していますか、それともバグですか?

4

1 に答える 1

2

メッセージは、セッションを介してユーザーに関連付けられます。ただし、セッション ID は Cookie に保存されます。Cookie はドメイン固有です。しかし、ミドルウェアの要点は、あるドメインから別のドメインにリダイレクトすることです。リダイレクト後、ユーザーは新しいドメインで新しい Cookie を取得します。

言い換えれば、これは今のようには機能しない可能性があります。唯一の代替手段は、リダイレクトされたリクエストの GET パラメータに何かを入れることです。

于 2011-01-04T15:43:34.893 に答える