2014-11-24 137 views
0

我正在学习Django。那么,或多或少;) 我正在写一个登录表单。因为我想知道东西是如何工作的,因为我需要这样做。如何在Django的登录处理中获取用户会话?

我无法把事情做好。用户在身份验证后,在我的“成功”视图中看不到,因为它重定向回登录。

我确实设置了我的MIDDLEWARE_CLASSES。

“有趣的事情”是我认为它进展顺利,因为它似乎工作。但是,我发现这是一个使用我的用户凭据的旧会话。现在我删除了所有会话/ cookie的东西,我没有工作。

这是我到目前为止有:

# views.py 
from django.shortcuts import render_to_response 
from django.contrib.auth import authenticate 
from django.template import RequestContext 

from django.http import HttpResponseRedirect 
from django.core.urlresolvers import reverse 

def login(request):  
    username = password = usertype = login_error_message = '' 
    if request.POST: 
     username = request.POST.get('username') 
     password = request.POST.get('password') 
     usertype = request.POST.get('usertype') 

     user = authenticate(username=username, password=password) 
     if user is not None: 
      if user.is_active:   
       return HttpResponseRedirect(reverse('login:success'))                
      else: 
       login_error_message = "Not active." 
     else: 
      login_error_message = "Unknown user" 

    return render_response(request, 'login/login.html', { 
     'login_error_message': login_error_message, 
     'usertype': usertype 
    }) 

def success(request): 
    if request.user.is_authenticated(): 
     user = request.user 

     return render_response(request, 'login/success.html', {               
      'username': user.username,     
     }) 
    else:   
     return HttpResponseRedirect('/login/')   

# https://djangosnippets.org/snippets/3/ 
# Wrapper simplifies using RequestContext in render_to_response. 
# overkill at this point, but may come in handy in view files with more views 
def render_response(req, *args, **kwargs): 
    kwargs['context_instance'] = RequestContext(req) 
    return render_to_response(*args, **kwargs) 

这是我的URL:

# urls.py 
from django.conf.urls import patterns, url 
from diataal.apps.login import views 

urlpatterns = patterns('',    
    url(r'^$', views.login), 
    url(r'^success/', views.success, name='success'), 
) 

我的网址显示的登录页面。如果我没有在“成功”视图中添加对用户的检查,则会显示成功页面(来自登录的302响应,然后来自成功页面的200响应);这对我来说似乎没问题。

但与检查,我从“成功”视图中的302响应,我在后面再次登录页面...

我不知道如何解决这个...我是什么做错了?

回答

3

在您的login视图中,您只有authenticate的用户。您不要实际上登录用户。

authenticate只接受用户名和密码,如果凭证有效,则返回user对象。这是一个实际的前兆login call

+0

你拯救了我的一天和大脑...... :) – ProX 2014-11-24 15:52:14