Redirecionando para URL no Flask

227

Eu sou novo no Python e no Flask e estou tentando fazer o equivalente Response.redirectao C # - ou seja: redirecionar para um URL específico - como faço para fazer isso?

Aqui está o meu código:

import os
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello World!'

if __name__ == '__main__':
    # Bind to PORT if defined, otherwise default to 5000.
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port)
iJade
fonte

Respostas:

365

Você precisa retornar um redirecionamento:

import os
from flask import Flask,redirect

app = Flask(__name__)

@app.route('/')
def hello():
    return redirect("http://www.example.com", code=302)

if __name__ == '__main__':
    # Bind to PORT if defined, otherwise default to 5000.
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port)

Consulte a documentação em documentos do balão. O valor padrão do código é 302, portanto, code=302pode ser omitido ou substituído por outro código de redirecionamento (um em 301, 302, 303, 305 e 307).

Xavier Combelle
fonte
95
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
from flask import Flask, redirect, url_for

app = Flask(__name__)

@app.route('/')
def hello():
    return redirect(url_for('foo'))

@app.route('/foo')
def foo():
    return 'Hello Foo!'

if __name__ == '__main__':
    # Bind to PORT if defined, otherwise default to 5000.
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port)

Veja o exemplo na documentação .

soerface
fonte
2
observe que você está passando o nome da função para a url_forqual cria uma URL que é passada para redirecionar e você a retorna.
Sunvic
40

De documentação da API Flask (v. 0.10):

frasco. redirecionar (location , code=302, Response=None)

Retorna um objeto de resposta (um aplicativo WSGI) que, se chamado, redireciona o cliente para o local de destino. Os códigos suportados são 301, 302, 303, 305 e 307. 300 não é suportado porque não é um redirecionamento real e 304 porque é a resposta para uma solicitação com uma solicitação com cabeçalhos If-Modified-Since definidos.

Novo na versão 0.6 : O local agora pode ser uma string unicode que é codificada usando a função iri_to_uri ().

Parâmetros:

  • location - o local para o qual a resposta deve redirecionar.
  • code- o código de status de redirecionamento. o padrão é 302.
  • Response(classe) - uma classe de resposta a ser usada ao instanciar uma resposta. O padrão é werkzeug.wrappers.Response, se não especificado.
vau
fonte
13

Acredito que essa questão merece uma atualização: basta dar uma olhada nas outras abordagens e fazer as comparações.

Aqui está como você redireciona (3xx) de um URL para outro no Flask (0.12.2):

#!/usr/bin/env python

from flask import Flask, redirect

app = Flask(__name__)

@app.route("/")
def index():
    return redirect('/you_were_redirected')

@app.route("/you_were_redirected")
def redirected():
    return "You were redirected. Congrats :)!"

if __name__ == "__main__":
    app.run(host="0.0.0.0",port=8000,debug=True)

Para outras referências oficiais, aqui .

ivanleoncz
fonte
5
flask.redirect(location, code=302)

Os documentos podem ser encontrados aqui .

der_fenix
fonte
5

O balão inclui a redirectfunção de redirecionamento para qualquer URL. Além disso, você pode cancelar uma solicitação com um código de erro com abort:

from flask import abort, Flask, redirect, url_for

app = Flask(__name__)

@app.route('/')
def hello():
    return redirect(url_for('hello'))

@app.route('/hello'):
def world:
    abort(401)

Por padrão, uma página de erro em preto e branco é mostrada para cada código de erro.

O redirectmétodo usa por padrão o código 302. Uma lista de códigos de status http aqui .

yoelvis
fonte
1

Para isso, você pode simplesmente usar a redirectfunção incluída noflask

from flask import Flask, redirect

app = Flask(__name__)

@app.route('/')
def hello():
    return redirect("www.exampleURL.com", code = 302)

if __name__ == "__main__":
    app.run()

Outra dica útil (como você é iniciante no balão) é adicionar app.debug = Truedepois de inicializar o objeto do balão, pois a saída do depurador ajuda muito ao descobrir o que está errado.

Manan Gouhari
fonte
1

Você pode usar assim:

import os
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
     # Redirect from here, replace your custom site url "www.google.com"
    return redirect("www.google.com", code=200)

if __name__ == '__main__':
    # Bind to PORT if defined, otherwise default to 5000.
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port)

Aqui está o link referenciado para este código.

RAJAHMAD MULANI
fonte