2017-05-14 81 views
0

這是我如何定義我的USER_LOGIN取景功能錯誤_代碼:禁止(403)。 Python的Django的:當用戶登錄刷新頁面

def login_user(request): 
    if request.method == "POST": 
     username = request.POST['username'] 
     password = request.POST['password'] 
     user = authenticate(username=username, password=password) 
     if user is not None: 
      if user.is_active: 
       login(request, user) 
       albums = Album.objects.filter(user=request.user) 
       return render(request, 'violin/index.html', {'scale': scale}) 
      else: 
       return render(request, 'music/login.html', {'error_message': 'Disabled account: Contact admin'}) 
     else: 
      return render(request, 'violin/login.html', {'error_message': 'Invalid credentials'}) 
    return render(request, 'violin/login.html') 

Here is my code error: Forbidden (403)

我該如何解決這個問題?

+0

登錄的用戶查看頁面時發生錯誤,但沒有登錄的用戶查看時發生錯誤?這似乎很奇怪,因爲GET請求將只執行最終的'render',這似乎完全不可知與登錄狀態有關。 –

回答

0

問題是,當用戶刷新頁面時,用戶已經登錄。 該頁面將是'violin/index/html'。 request.method是GET。在視圖中,如果request.method是GET,它會轉到else語句。但是沒有else語句,所以它會返回最後一行代碼(render(request,'violin/login.html')。因此,兩個模板試圖在同一個請求中呈現,這是被禁止的。是403.要麼你可以登陸後的用戶重定向到另一個視圖,或者你需要編寫一個else語句。 但重定向到另一個看法就會好得多。

def login_user(request): 
    if request.method == "POST": 
     username = request.POST['username'] 
     password = request.POST['password'] 
     user = authenticate(username=username, password=password) 
     if user is not None: 
      if user.is_active: 
       login(request, user) 
       return redirect('index_view') 
      else: 
       return render(request, 'music/login.html', {'error_message': 'Disabled account: Contact admin'}) 
     else: 
      return render(request, 'violin/login.html', {'error_message': 'Invalid credentials'}) 
    return render(request, 'violin/login.html', {}) 

你需要寫爲「另一種觀點的index.html」。

這樣的事情,

def index_view(request): 
    if request.user.is_authenticated(): 
     albums = Album.objects.filter(user=request.user) 
     return render(request, 'violin/index.html', {'albums':albums}) 
    else: 
     return Http404 
+0

我試過這樣的:'return render(request,'music/login.html',{})'但是我仍然得到了同樣的錯誤 – Pozeidon

+0

更新了代碼,試試這個 – zaidfazil

+0

什麼是你所傳遞的變量scale在上下文中 – zaidfazil