2017-01-12 1 views
1

Ich möchte meine Login-Ansicht nur für nicht angemeldete Benutzer öffnen. bedeutet, sobald der Benutzer eingeloggt ist, kann er/sie nicht auf die Login-Ansicht zugreifen, indem er/login/url manuell drückt.Wie kann die Anmeldeansicht nach dem Anmelden des Benutzers eingeschränkt werden?

Vielen Dank im Voraus :)

+1

Überprüfen Sie 'request.user.is_authenticated'. –

+0

@PauloScardine Ich spreche über die Einschränkung einer "Ansicht" -Funktion durch einen Dekorateur. –

+0

Gibt es einen Grund, den angemeldeten Benutzer nicht auf seine Homepage umzuleiten, statt den Zugriff auf die Login-URL zu beschränken? –

Antwort

1

Sie @user_passes_test verwenden können:

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): 
    ... 

Sie @user_passes_test(user_is_not_logged_in, login_url='/') auf eine andere URL umleiten können und Server-Fehler zu vermeiden.

+0

das funktioniert. Wenn der Benutzer jedoch nach dem Anmelden manuell auf/login/url klickt, antwortet der Server nicht. können Sie bitte eine Methode vorschlagen, um dies zu beheben. –

+0

@wim diese Methode funktioniert korrekt. –

+2

'@user_passes_test (user_is_not_logged_in, login_url = '/')' Sie können dies verwenden, um zu einer anderen URL umzuleiten und keine Serverprobleme zu bekommen. –

0

Probieren Sie etwas wie dieses anon_required Dekorateur (ungetestet):

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 

Sie alles tun können, statt 400 HTTP zurückkehren, wie der Benutzer sein Profil Umleitung (oder zum Logout URL, vielleicht möchte er um sich einzuloggen als ein anderer Benutzer).

2

Importieren Sie einfach die die Loginview und übergeben - redirect_authenticated_user=True alles wird

So. in urls.py abgeschlossen sein die urls.py ist

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'), 

] 

und das ist es. Das Argument in LoginView kümmert sich um Ihr Problem, indem es angemeldete Benutzer umleitet. In documentation können Sie es lesen.

Verwandte Themen