Umleiten nach der Anmeldung mit Django

stimmen
1

Ich habe eine Login-Seite gesetzt, als meine Homepage, localhost / mysite. Ich kann anmelden und erfolgreich auf localhost / mysite / Hauptseite weitergeleitet.

Das Problem ist, dass ich nur durch Eingabe des Pfades in der URL, zum Beispiel der Anmeldung einfach umgehen kann; Ich navigieren Sie zu der Homepage, auf der Login-Formular ist, dann habe ich nur hinzufügen / main zu localhost / mysite / die erfolgreich Lasten localhost / mysite / main.

Wie man sich vorstellen kann, ist dies nicht so toll. Weiß jemand, was ich hier falsch gemacht haben?

Meine Sicht

def index(request):
    if request.method == POST:
        form = AuthenticationForm(request, data=request.POST)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            user = authenticate(username=username, password=password)
            if user is not None:
                login(request, user)
                messages.info(request, OK)
                return redirect('/mysite/mainpage')
            else:
                messages.error(request, NOT OK)

    form = AuthenticationForm()
    return render(request, 'mysite/login.html', {form:form})

Mein urls.py

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^mainpage/$', views.main),
]
Veröffentlicht am 13/02/2020 um 22:03
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
1

Sie können die Verwendung @login_requiredDekorateur [Django-doc] auf Ihrer mainAnsicht. Dies wird durch die auf den Pfad Satz umleiten LOGIN_URLEinstellung [Django-doc] anmelden Benutzer:

# app/views.py

from django.contrib.auth.decorators import login_required

def index(request):
    # …

@login_required
def main(request):
    # …

und in der settings.py:

# settings.py

# …
LOGIN_URL = 'index'
# …

EDIT : Sie können die weglassen ?next=Abfrageparameter, durch die Einstellung redirect_field_name=…Parameter auf None:

@login_required(redirect_field_name=None)
def main(request):
    # …
Beantwortet am 13/02/2020 um 22:08
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more