2012-08-16 45 views
0

views.py

def login_user(request): 
    if request.POST: 
     sform = LoginForm(request.POST) 
     rform = UserForm() 
     if sform.is_valid(): 
      username = request.POST.get('username') 
      password = request.POST.get('password') 
      user = authenticate(username = username,password = password) 
      if user is not None: 
       if user.is_active: 
        login(request,user) 
        return redirect(request.path) 
       else: 
        state = "Your account is not active." 
        #or first set the user to is active and then log in 
        return redirect('acitvate_account',user = user) 
       return render_to_response('home.html',{'state':state,'user':user},context_instance = RequestContext(request)) 
      else: 
       state = "Incorrect Username or Password" 
       #sform = LoginForm() 
       form = LoginForm() 
       return render_to_response('register.html',{'state':state,'sform':sform,'rform':rform,'form':form},context_instance = RequestContext(request)) 
     else: 
      state = "Invalid form" 
      dLoginForm = LoginForm() 
      rform = PartialSignupForm() 
      return render_to_response('register.html',{'sform':sform,'rform':rform,'form':form},context_instance = RequestContext(request)) 
    else: 
     dLoginForm = LoginForm() 
     rform = PartialSignupForm() 
     return render_to_response('category.html',{'dLoginForm':dLoginForm,'rform':rform},context_instance = RequestContext(request)) 

urls.py

urlpatterns += patterns('beenthere.views', 
    #beenthere urls 
    (r'^$','index'), 
    (r'^home2/$','category'), 
    (r'^accounts/login/$','login_user'), 
    (r'^accounts/register/$','register_user'), 
    (r'^home/(?P<user>\w*)$','home'), 
    (r'^logout/','logout_user'), 

    ) 

疑问

我怎么想重定向到相同的URL从哪个请求发送,我尝试使用request.path,但它将我重定向到/ accounts/login/url,这是不希望的。重定向到从请求发送相同的URL

回答

2

你需要做的是什么跟踪引荐是当你显示的登录表单,可能在存储的用户会话的值,然后将用户重定向回该网址后,他们已经成功登录。

沿线的

东西:

def login_user(request): 
    if request.POST: 
     sform = LoginForm(request.POST) 
     rform = UserForm() 
     if sform.is_valid(): 
      username = request.POST.get('username') 
      password = request.POST.get('password') 
      user = authenticate(username = username,password = password) 
      if user is not None: 
       if user.is_active: 
        login(request,user) 
        return redirect(request.path) 
       else: 
        state = "Your account is not active." 
        #or first set the user to is active and then log in 
        return redirect(req.session['after_login_url'],user = user) 
       return render_to_response('home.html',{'state':state,'user':user},context_instance = RequestContext(request)) 
      else: 
       state = "Incorrect Username or Password" 
       #sform = LoginForm() 
       form = LoginForm() 
       return render_to_response('register.html',{'state':state,'sform':sform,'rform':rform,'form':form},context_instance = RequestContext(request)) 
     else: 
      state = "Invalid form" 
      dLoginForm = LoginForm() 
      rform = PartialSignupForm() 
      return render_to_response('register.html',{'sform':sform,'rform':rform,'form':form},context_instance = RequestContext(request)) 
    else: 
     dLoginForm = LoginForm() 
     rform = PartialSignupForm() 
     req.session['after_login_url'] = req.META.get('HTTP_REFERER') 
     return render_to_response('category.html',{'dLoginForm':dLoginForm,'rform':rform},context_instance = RequestContext(request)) 

当然,你也应该补充检查,以确保该HTTP_REFERER头存在,并确保after_login_url键存在(并可能有一个健全的价值,如果外部网站直接链接到您的登录页面或类似链接),并且如果有任何这些测试失败,请安全回退l(就像用户的个人资料页面或您的网站索引页面一样)。

+0

感谢乔,但没有任何简单的解决方案,如果我直接使用request.META.get('HTTP_REFERER')重定向 – Abhimanyu 2012-08-16 14:56:44

+0

当提交表单时HTTP_REFERER将会是登录表单本身。 HTTP_REFERER是用户在加载当前页面时来自的URL,因此如果您想在提交表单后使用它来重定向它们,则必须在最初查看表单时抓取它。 – 2012-08-16 14:58:44

+0

是啊是的,我已经得到了你的观点,但我在同一页面上使用登录表单和注册表单,这些是对话框形式,所以它是一种动态的,所以HTTP_REFERER是我希望它重定向的相同url,所以它工作在我的情况,但你的解决方案是更广泛的,谢谢 – Abhimanyu 2012-08-16 15:05:43