重定向到Flask中的URL

iJa*_*ade 192 python redirect flask

我是Python和Flask的新手,我正在尝试做与...相同的Response.redirect方式Response.redirect- 即:重定向到特定的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)
Run Code Online (Sandbox Code Playgroud)

Xav*_*lle 306

你必须返回一个重定向:

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)
Run Code Online (Sandbox Code Playgroud)

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


soe*_*ace 81

#!/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)
Run Code Online (Sandbox Code Playgroud)

看一下文档中的示例.

  • 请注意,您正在将函数名称传递到url_for中,然后该URL会构建一个传递给重定向的URL,并将其返回。 (2认同)

for*_*ord 38

Flask API文档(v.10.0):

烧瓶.重定向(location,code=302,Response=None)

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

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

参数:

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


iva*_*ncz 11

我相信这个问题值得更新:只需看看其他方法并进行比较.

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

#!/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)
Run Code Online (Sandbox Code Playgroud)

对于其他官方文献,在这里.


alf*_*edo 9

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)
Run Code Online (Sandbox Code Playgroud)

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

redirect方法默认采用代码 302。http 状态代码列表在这里


小智 9

如果你只想重定向到一个没有任何状态代码或类似内容的网址,你可以简单地说

from flask import Flask, redirect

app = Flask(__name__)

@app.route('/')
def redirect_to_link():
    # return redirect method, NOTE: replace google.com with the link u want
    return redirect('https://google.com')
Run Code Online (Sandbox Code Playgroud)

这是 Flask 文档的链接以获取更多说明


小智 7

flask.redirect(location, code=302)
Run Code Online (Sandbox Code Playgroud)

文档可以在这里找到。


小智 5

为此,您可以简单地使用redirect包含在flask

from flask import Flask, redirect

app = Flask(__name__)

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

if __name__ == "__main__":
    app.run()
Run Code Online (Sandbox Code Playgroud)

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


Ran*_*ore 5

有两种方法可以重定向到 Flask 中的 URL。

  1. 例如,您希望在用户登录后将其重定向到另一条路线等。
  2. 您可能还想将用户重定向到需要某些变量的路由示例: @app.route('/post/<string:post_id>')

好吧,要为案例 1 实现 Flask 重定向,很简单,只需执行以下操作:

from flask import Flask,redirect,render_template,url_for
app = Flask(__name__)


@app.route('/login')
def login():
    # if user credentials are valid, redirect to user dashboard
    if login == True:
       return redirect(url_for(app.dashboard))
    else:
       print("Login failed !, invalid credentials")
    return render_template('login.html',title="Home Page")


@app.route('/dashboard')
def dashboard():
    return render_template('dashboard.html',title="Dashboard")
Run Code Online (Sandbox Code Playgroud)

要实现案例 #2 的 Flask 重定向,请执行以下操作

from flask import Flask,redirect,render_template,url_for
app = Flask(__name__)


@app.route('/home')
def home():
    # do some logic, example get post id
    if my_post_id:
       # **Note:** post_id is the variable name in the open_post route
       # We need to pass it as **post_id=my_post_id**
       return redirect(url_for(app.open_post,post_id=my_post_id))
    else:
       print("Post you are looking for does not exist")
    return render_template('index.html',title="Home Page")


@app.route('/post/<string:post_id>')
def open_post():
    return render_template('readPost.html',title="Read Post")
Run Code Online (Sandbox Code Playgroud)

同样的事情可以在视图中完成

<a href="{{url_for(app.open_post,post_id=my_post_id)}}"></a>
Run Code Online (Sandbox Code Playgroud)

请注意:重定向时始终使用app.homeor app.something..(路由或视图函数名称)而不是使用redirect("/home")"/home"原因是,如果您出于某种原因将路线示例从 修改为"/index/page",那么您的代码将会中断