Django:使用urlresolver设置cookie路径

时间:2012-05-25 12:24:31

标签: django cookies django-settings

我在django上写了一个webservices应用程序。这个应用程序可以在我们的服务器上找到几个实例。

例如:

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

app实例托管在apache2到mod_wsgi。

我对所有这些实例使用cookie身份验证,并希望每个实例的cookie不与其他实例重叠。我需要设置SESSION_COOKIE_PATH值。

我不知道在发布应用程序所在的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))

我在加载所有网址后添加了这一位:

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

不幸的是,urlresolvers.reverse('server_root')会返回/而不是预期的,例如/testapp/。如果我登录每个实例,我的cookie会重叠。

虽然稍后在应用程序使用中,但我对某些视图使用django.db.models.permalink,这会返回一个正确的带前缀的网址(例如/testapp/page/465)。

执行urls.py时可能会出现缺少上下文的内容。

有什么想法吗?

感谢阅读。

1 个答案:

答案 0 :(得分:3)

shouldn't change Django settings at runtime。如果您使用的是Django 1.4或更高版本,则可以使用reverse_lazy并在settings.py中设置SESSION_COOKIE_PATH

SESSION_COOKIE_PATH = reverse_lazy('server_root')