【问题标题】:Django - how to redirect to index page upon logout?Django - 如何在注销时重定向到索引页面?
【发布时间】:2013-07-11 14:15:50
【问题描述】:

如果用户身份验证失败,我正在尝试实现一个简单的页面重定向到索引页面。

想象一下我有两条路:

www.xyz.com/app/
www.xyz.com/app/user

第一个渲染索引页面,第二个是登录成功的授权用户登陆页面。

在我的views.py 文件中,我有

def index(request):
  return render(request, "app/index.html")

def userLogin(request):
  loginUser = authenticate(username = request.POST["username"], password = request.POST["password"])

  if loginUser is not None:
    if not loginUser.is_active:
      loginUser.is_active = True
      loginUser.save()

      login(request, loginUser)
      return HttpResponse(reverse(user))    
    else:
      return HttpResponse(simplejson.dumps({"login" : "failed"}))

def userLogout(request):
  logout(request)
  return HttpResponseRedirect(reverse(index))

urls.py

urlpatterns = patterns("",
  url(r'^$', views.index, name = "index"),
  url(r'^user/$', views.user, name = "user"),
  url(r'^registerNewUser/$', views.registerNewUser),
  url(r'^userLogin/$', views.userLogin),
  url(r'^user/userLogout/$', views.userLogout),
)

注销功能是通过 Ajax POST 请求访问的,在日志中,我看到了

 [11/Jul/2013 09:08:00] "POST /app/user/userLogout/ HTTP/1.1" 302 0
 [11/Jul/2013 09:08:00] "GET /app/ HTTP/1.1" 200 5039

但索引页面未加载。但是,如果我刷新页面,则会加载索引页面,因为对 request.user.is_authenticated() 的条件调用会触发相同的 HttpResponseRedirect 调用和参数失败。

【问题讨论】:

  • 您的LOGOUT_URL 设置是什么样的?
  • LOGOUT_URL = "/app/" 是我放入设置文件的内容。它不起作用,“/app/index.html` 也不起作用
  • 这个怎么样:(r'^user/userLogout/$', 'django.contrib.auth.views.logout', {'next_page': '/app/'})
  • 如果您发出 ajax 请求注销,您不需要使用 Javascript 执行重定向吗?
  • @ChrisMcKinnel,这就是我最终做的,但我最初的希望是让 Django 服务器执行重定向而不需要任何 JS 响应处理。

标签: python django authentication


【解决方案1】:
If login fail i mean in else case return render(request, "app/index.html") instead
of return HttpResponse(simplejson.dumps({"login" : "failed"}))

**updated userLogin**

def userLogin(request):
    loginUser = authenticate(username = request.POST["username"],
    password = request.POST["password"])

if loginUser is not None:
if not loginUser.is_active:
  loginUser.is_active = True
  loginUser.save()

  login(request, loginUser)
  return HttpResponse(reverse(user))    
else:
  return render(request, "app/index.html")

【讨论】:

    猜你喜欢
    • 2019-05-28
    • 2023-03-18
    • 2018-05-17
    • 2013-09-05
    • 2019-02-28
    • 2014-02-10
    • 2011-10-29
    • 2021-08-06
    • 1970-01-01
    相关资源
    最近更新 更多