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)
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)
对于其他官方文献,在这里.
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)
小智 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因为调试器输出在找出问题所在时有很大帮助。
有两种方法可以重定向到 Flask 中的 URL。
@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",那么您的代码将会中断