2013-12-23 72 views
0

我的目標是檢查用戶是否登錄了。如果用戶的類型是「special」,那麼我想將該用戶重定向到一個單獨的頁面,稱爲儀表板(誰視圖在一個單獨的應用程序)。如果用戶不特殊,則會呈現常規成功頁面。瀏覽器沒有呈現對成功的Django重定向的響應

普通用戶的情況完美,但特殊用戶的情況失敗。從使用調試器和Chrome的網絡檢查器,我注意到Django成功執行重定向,並將正確的HTML響應返回給瀏覽器,但瀏覽器在顯示該頁面時不採取任何行動。 Chrome網絡檢查器上的網絡標籤向服務器顯示了兩個不同的請求 - 原始登錄請求以及重定向到儀表板的請求。

我該怎麼做才能確保瀏覽器顯示儀表板?

這裏是views.py登錄功能:

def login(request): 
    if request.method == 'GET': 
     return render_home(request, {'login_required': True}) 
    errors = [] 
    email = request.POST['email'] 
    password = request.POST['password'] 
    user = authenticate(username=email, password=password) 
    if user is not None: 
     if user.is_active: 
      auth_login(request, user) 
     else: 
      errors = ["User isn't active"] 
    else: 
     errors = ["User couldn't be authenticated"] 

    if (user.is_special): 
     url = reverse('special.views.dashboard') 
     return HttpResponseRedirect(url) 
    template = loader.get_template('users/login.js') 
    context = Context({"errors": errors}) 
    return HttpResponse(template.render(context), mimetype="text/javascript") 

這是在特殊的應用程序的views.py儀表盤功能:

@login_required 
def dashboard(request): 
    user = request.user 
    special_data = get_special_data(user) 
    data = {'user': user, 'special_data': special_data} 
    return render(request, 'special_dashboard.html', data) 

回答

1

您從視圖返回的javascript正常情況下,這表明你正在使用ajax來處理登錄表單。如果是這種情況,您還需要在客戶端處理重定向。

+0

謝謝,你是對的!我決定通過在現有的javascript響應中設置window.location.href變量來重定向,而不是通過Django重定向。 – impasnuj

相關問題