在Flask中重定向到URL


226

我是Python和Flask的新手,我正在尝试做与Response.redirectC#中相同的操作-即:重定向到特定的URL-我该如何处理?

这是我的代码:

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)

Answers:


364

您必须返回重定向:

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)

请参阅flask文档上的文档。代码的默认值为302,因此code=302可以省略或替换为其他重定向代码(301、302、303、305和307中的一个)。


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)

看一下文档中的示例


2
请注意,您正在传递函数名称url_for,然后在其中建立URL,该URL将传递给重定向并返回。
Sunvic

40

Flask API文档(v。0.10):

烧瓶。重定向locationcode=302Response=None

返回一个响应对象(WSGI应用程序),如果调用该对象,它将客户端重定向到目标位置。支持的代码为301、302、303、305和307。不支持300,因为它不是真正的重定向;而由于它是带有定义的If-Modified-Since标头的请求的答案,因此不支持304。

0.6版的新增功能:该位置现在可以是使用iri_to_uri()函数编码的unicode字符串。

参数:

  • location –响应应重定向到的位置。
  • code–重定向状态代码。默认为302。
  • Response(类)–实例化响应时要使用的Response类。如果未指定,则默认值为werkzeug.wrappers.Response。

13

我认为这个问题值得更新:只需看看其他方法并进行比较即可。

这是在Flask(0.12.2)中从一个URL重定向(3xx)到另一个URL的方法:

#!/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)

如需其他官方参考,请点击此处



5

Flask包含redirect用于重定向到任何URL 的功能。此外,您可以使用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)

默认情况下,每个错误代码均显示黑白错误页面。

redirect方法默认情况下采用代码302。此处是http状态代码的列表。


1

为此,您可以简单地使用redirect包含在其中的功能flask

from flask import Flask, redirect

app = Flask(__name__)

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

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

另一个有用的技巧(因为您是Flask的新手),是app.debug = True在初始化flask对象之后添加的,因为调试器的输出会在找出问题所在时提供很多帮助。


1

您可以这样使用:

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)

这是此代码的引用链接。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.