Redirigir después de iniciar sesión con Django

votos
1

Tengo un conjunto página de acceso como página de inicio, localhost / proyecto. Puedo iniciar sesión con éxito y ser redirigido a localhost / proyecto / MainPage.

La cuestión es que puedo pasar por alto la entrada simplemente con sólo introducir la ruta en la URL, por ejemplo; Navegación a la página de inicio de sesión en el que se forma, entonces simplemente añadir / MainPage a localhost / proyecto / la que se carga correctamente localhost / proyecto / MainPage.

Como se puede imaginar, esto no es grande. ¿Alguien sabe lo que hice mal?

Mi vista

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})

mi urls.py

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^mainpage/$', views.main),
]
Publicado el 14/02/2020 a las 00:03
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
1

Se puede utilizar el @login_requireddecorador [Django-doc] en su mainpunto de vista. Esto redirigirá al conjunto camino por el LOGIN_URLajuste de [Django-doc] para iniciar la sesión en el usuario:

# app/views.py

from django.contrib.auth.decorators import login_required

def index(request):
    # …

@login_required
def main(request):
    # …

y en el settings.py:

# settings.py

# …
LOGIN_URL = 'index'
# …

EDITAR : Puede omitir el ?next=parámetro de consulta, estableciendo el redirect_field_name=…parámetro a None:

@login_required(redirect_field_name=None)
def main(request):
    # …
Respondida el 14/02/2020 a las 00:08
fuente por usuario

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