【问题标题】:Django: use urlresolver to set cookie pathDjango:使用 urlresolver 设置 cookie 路径
【发布时间】:2012-06-01 00:49:42
【问题描述】:

我在 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))

我在加载所有 url 后添加了这个位:

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 用于某些视图,这会返回一个正确的前缀 URL(例如 /testapp/page/465)。

执行urls.py 时可能缺少上下文。

有什么想法吗?

感谢阅读。

【问题讨论】:

    标签: django cookies django-settings


    【解决方案1】:

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

    SESSION_COOKIE_PATH = reverse_lazy('server_root')
    

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 1970-01-01
      • 2014-02-15
      • 2012-03-03
      • 1970-01-01
      • 2016-02-14
      • 2021-10-31
      • 2016-04-28
      • 1970-01-01
      相关资源
      最近更新 更多