2013-12-23 33 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

相关问题