Django:cookie设置代码中的无限重定向?

时间:2011-04-04 22:30:09

标签: django http cookies

这个cookie设置/重定向Django视图代码导致重定向循环,即使对于启用了cookie的浏览器也是如此。任何人都可以解释如何修复它吗?

在urls.py中:

url(r'^$', 'library.views.home', name="home"),
url(r'^ldap/(?P<next>[\w-]*)/$', 'library.views.update_session_from_ldap', name="ldap"),

在views.py中:

def home(request):
    print 'home'
    current_user = request.COOKIES.get('ldap_user', None)
    print current_user
    if not current_user:
        return redirect('/ldap', next='/')
    print 'now here'
# url = '/ldap'
def update_session_from_ldap(request, next):
    remote_user = request.META.get('REMOTE_USER', None)
    hrr = HttpResponseRedirect(next)
    hrr.set_cookie('ldap_user', remote_user)
    print 'set cookie!'
    return hrr

我只是看......

home
None
[04/Apr/2011 23:21:17] "GET / HTTP/1.1" 302 0
set cookie!
[04/Apr/2011 23:21:17] "GET / HTTP/1.1" 302 0
set cookie!
[04/Apr/2011 23:21:17] "GET / HTTP/1.1" 302 0
set cookie!... ad infinitum until the browser intervenes

如果我第二次重新加载页面,则可以:print语句显示正确的值,并且没有重定向,因此cookie正在运行。这是代码第一次运行时进入无限循环。

有什么想法吗?有没有更好的方法来解决这个问题?

Firefox和Chrome中的问题相同。

谢谢!

更新:我认为问题在于配置URL的方式:我需要找到一种方法,从'home'转到'ldap',然后再以某种方式返回。我想目前'ldap'只是重定向到自己。

1 个答案:

答案 0 :(得分:0)

看起来你的正则表达式不匹配/

<强> urls.py:

url(r'^ldap/(?P<next>[\w-]*)/$', 'library.views.update_session_from_ldap', name="ldap"),

<强> views.py:

def update_session_from_ldap(request, next):
    if next is None:
        hrr = HttpResponseRedirect("/")
    else:
        hrr = HttpResponseRedirect(next)
    remote_user = request.META.get('REMOTE_USER', None)
    hrr.set_cookie('ldap_user', remote_user)
    print 'set cookie!'
    return hrr