我在django上写了一个webservices应用程序。这个应用程序可以在我们的服务器上找到几个实例。
例如:
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))
在加载完所有urls后,我添加了以下内容:
from django.core import urlresolvers
from django.conf import settings
settings.SESSION_COOKIE_PATH = urlresolvers.reverse('server_root')
不幸的是,urlresolvers.reverse('server_root')
返回的是/
,而不是预期的,例如,/testapp/
。如果我登录到每个实例,我的cookies会重叠。
不过,在稍后的应用程序使用中,我对一些视图使用了django.db.models.permalink
,它会返回一个正确的前缀URL (例如,/testapp/page/465
)。
执行urls.py
时可能缺少上下文中的某些内容。
有什么想法吗?
感谢您的阅读。
发布于 2012-05-25 12:43:06
你是shouldn't change Django settings at runtime。如果您使用的是Django1.4或更高版本,则可以使用reverse_lazy
并在settings.py中设置SESSION_COOKIE_PATH
。
SESSION_COOKIE_PATH = reverse_lazy('server_root')
https://stackoverflow.com/questions/10754387
复制相似问题