Redirecionar após o login com Django

votos
1

Eu tenho um conjunto login-page como minha página inicial, localhost / mysite. I pode fazer o login com sucesso e ser redirecionado para localhost / mysite / mainpage.

A questão é que eu posso ignorar o login simplesmente por apenas digitando o caminho na URL, por exemplo; I navegar para a página inicial, onde o formulário de login é, então eu apenas adicionar / mainpage para localhost / mysite / que com sucesso cargas localhost / mysite / mainpage.

Como você pode imaginar, isso não é grande. Alguém sabe o que eu fiz de errado aqui?

Minha visão

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

meu urls.py

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^mainpage/$', views.main),
]
Publicado 14/02/2020 em 00:03
fonte usuário
Em outras línguas...                            


1 respostas

votos
1

Você pode usar o @login_requireddecorador [Django-doc] em seu mainponto de vista. Isto irá redirecionar para o caminho definido pela LOGIN_URLdefinição [Django-doc] para entrar no usuário:

# app/views.py

from django.contrib.auth.decorators import login_required

def index(request):
    # …

@login_required
def main(request):
    # …

e no settings.py:

# settings.py

# …
LOGIN_URL = 'index'
# …

EDIT : Você pode omitir o ?next=parâmetro de consulta, definindo o redirect_field_name=…parâmetro para None:

@login_required(redirect_field_name=None)
def main(request):
    # …
Respondeu 14/02/2020 em 00:08
fonte usuário

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