这个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'只是重定向到自己。
答案 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