1
resposta

Dúvida com redirection

Boa noite! por que sempre devemos colocar o return antes do redirection? por que não usar direto o redirection?

1 resposta

Olá Wallemberg, tudo bem com você?

Peço desculpas pela demora no retorno.

Quando estamos acessando uma rota do Flask estamos chamando por debaixo dos panos uma função do Python que em sua estrutura terá os códigos responsáveis pelo funcionamento da rota chamada. Para que uma rota seja considerada como válida no Flask a função de criação desta rota, não pode retornar um objeto do tipo None e deve possuir um retorno de um objeto que pode ser convertido para o tipo response.

Por padrão no Python uma função que não possui um retorno (return) declarado irá retornar o tipo None. Podemos verificar esse comportamento criando uma função de teste, como apresentado abaixo.

def funcao_sem_retorno():
    numero = 10
    nome = 'Alura'


retorno = funcao_sem_retorno()

print(retorno)

Resultado

None

O comportamento apresentado acima está presente nas declarações de rota do Flask, por isso quando usamos o método redirect() em uma rota, temos que certificar que esse método é retornado pela função. Uma rota que não possui um retorno declarado, gera um erro de tipo (TypeError), por não retornar um valor válido como resposta.

Abaixo temos a representação de uma rota onde usamos o método redirect(), mas não fazemos o seu retorno.

@app.route('/logout')
def logout():
    session['usuario_logado'] = None
    flash('Logout efetuado com sucesso!')
    redirect(url_for('index'))

Ao acessarmos a rota /logout, temos o seguinte erro.

TypeError: The view function for 'logout' did not return a valid response. The function either returned None or ended without a return statement.

Em resumo temos que, uma rota deve possuir um retorno declarado. E quando é usado o método redirect() este deve ser retornado pela função que representa a rota acessada.

Quero aproveitar a oportunidade e recomendar a leitura do seguinte artigo, onde será abordado com detalhes os tipos de objetos que são aceitos como retorno em uma rota e que podem ser convertidos para o tipo response, será apresentado também como realizar suas declarações.

O conteúdo recomendado acima está em inglês, o uso da língua inglesa é bem comum na área de tecnologia, mas não se preocupe, caso não tenha afinidade com essa linguagem, recomendo que utilize o tradutor do navegador para uma melhor compressão.

Fico à disposição em caso de dúvidas.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software