2017-01-12 116 views
1

我想只對未登錄的用戶打開我的登錄視圖。意味着用戶登錄後,他/她無法通過手動點擊/ login/url來訪問登錄視圖。如何限制用戶登錄後的登錄視圖?

感謝提前:)

+1

檢查'request.user.is_authenticated'。 –

+0

@PauloScardine我說的是限制一些裝飾者的「視圖」功能。 –

+0

是否有理由不將日誌用戶重定向到他們的主頁,而不是限制訪問登錄網址? –

回答

1

您可以使用@user_passes_test

from django.contrib.auth.decorators import user_passes_test 

def user_is_not_logged_in(user): 
    return not user.is_authenticated() 

@user_passes_test(user_is_not_logged_in) 
def my_view(request): 
    ... 

您可以使用@user_passes_test(user_is_not_logged_in, login_url='/')重定向到另一個網址,避免服務器錯誤。

+0

這是工作。但是當用戶在登錄後手動點擊/ login/url時,服務器沒有響應。你能否請建議一些方法來解決這個問題。 –

+0

@wim此方法正常工作。 –

+2

'@user_passes_test(user_is_not_logged_in,login_url ='/')'您可以使用它重定向到另一個網址並且不會出現服務器問題。 –

0

嘗試這樣的事情anon_required裝飾(未經測試):

def anon_required(view_func): 
    """ 
    Decorator for views that checks that the user is NOT logged in. 
    """ 
    def decorated(request, *args, **kwargs): 
     if request.user.is_authenticated(): 
      raise HttpResponseBadRequest("Get out, you are authenticated.") 
     return view_func(request, *args, **kwargs) 
    return decorated 

你可以做,而不是返回HTTP 400,喜歡的用戶重定向到他的個人資料什麼(或註銷URL,也許他想登錄作爲不同的用戶)。

2

只需導入一個LoginView並傳遞 - redirect_authenticated_user=True 每一件事都會在urls.py完成

所以。 urls.py是 -

from django.conf.urls import url 
    from django.contrib.auth.views import LoginView 


urlpatterns = [ 

    url(r'^login/$', LoginView.as_view(redirect_authenticated_user=True), name='login'), 

] 

就是這樣。 LoginView中的參數將通過重定向登錄用戶來解決您的問題。在documentation你可以閱讀它。