2

django で Web サービス アプリケーションを作成しました。このアプリケーションは、サーバー上で複数のインスタンスとして見つかります。

例えば:

http://server1/testapp/
http://server2/sandboxapp/
http://server2/productionapp/

アプリ インスタンスは、mod_wsgi を介して apache2 でホストされます。

これらすべてのインスタンスで Cookie 認証を使用しており、それぞれの Cookie が他のインスタンスと重複しないようにしたいと考えています。SESSION_COOKIE_PATH 値を設定する必要があります。

アプリケーションがデプロイされている URL を事前に知らないことがあります。そのため、逆URLを使用してその値を推測したいと思います。

私のメインurls.pyは次のようになります。

urlpatterns = patterns('',
    (r'admin/', include(admin.site.urls)),
     url(r'^$', view_server_root, {}, name='server_root'),
    ),
# here I also includes urls from the various sub-apps
for app in apps:
    urlpatterns.append(url(urlprefix,  include(app.urls))

すべての URL が読み込まれた後に、このビットを追加しました。

from django.core import urlresolvers
from django.conf import settings
settings.SESSION_COOKIE_PATH = urlresolvers.reverse('server_root')

残念ながら、期待どおりではなく、たとえば をurlresolvers.reverse('server_root')返します。各インスタンスにログインすると、Cookie が重複します。//testapp/

ただし、後でアプリケーションを使用する際にdjango.db.models.permalink、いくつかのビューに使用すると、正しい接頭辞付き URL (例: /testapp/page/465) が返されます。

実行中に欠落しているコンテキストに何かがある可能性がありますurls.py

何か案は?

読んでくれてありがとう。

4

1 に答える 1

3

実行時に Django の設定を変更しないでください。Django 1.4 以降を使用している場合は、settings.py を使用reverse_lazyして設定できる場合がありSESSION_COOKIE_PATHます。

SESSION_COOKIE_PATH = reverse_lazy('server_root')
于 2012-05-25T12:43:06.373 に答える