我的目标是检查登录的用户类型。如果用户的类型为“特殊”,那么我想将该用户重定向到名为dashboard的单独页面(谁的视图位于单独的应用程序中)。如果用户不是特殊用户,则会呈现常规成功页面。
普通用户的情况完美,但特殊用户的情况失败。通过使用调试器和Chrome的Web检查器,我注意到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)
答案 0 :(得分:1)
您正在从正常情况下的视图中返回javascript,这表明您使用ajax来处理登录表单。如果是这种情况,您还需要在客户端处理重定向。