2014-11-24 104 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

相關問題