Flask框架——重定向(redirect)、url_for

目录

重定向(redirect)

url_for


在上篇文章中,我们学习了Flask框架——response响应对象及request对象,这篇文章我们来学习Flask框架——重定向、url_for。

重定向(redirect)

重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。

其流程如下图所示:

首先客户端发送网络请求给服务端,服务端接收到请求后返回了状态码为302、新的location给客户端,客户端发现返回的状态码为302,就自动发送新的location中url网络请求给服务端,服务端就根据请求内容返回响应内容。

网页需要重定向情况:

  • 网站调整(如改变网页目录结构);

  • 网页被移到一个新地址;

  • 网页扩展名改变(如应用需要把.php改成.Html或.shtml)。

这种情况下,如果不做重定向,则用户收藏夹或搜索引擎数据库中旧地址只能让访问客户得到一个404页面错误信息,访问流量白白丧失;再者某些注册了多个域名的网站,也需要通过重定向让访问这些域名的用户自动跳转到主站点等。

在Flask框架中提供了redirect()重定向方法,其语法格式如下:

redirect(location,code=302,Response=None)

其中:

  • location:响应应重定向到的位置;

  • code:响应码,支持的响应码为301、302、303、305、307和308,默认响应码为302;

  • Response:实例化响应时要使用的响应类。

示例代码如下所示:

from flask import Flask, redirect

app=Flask(__name__)

#路由装饰器
@app.route('/index')
def index():
    return "<a href='/register'>首页</a>"

@app.route('/register')
def register():
    return "<a href='/redirect'>跳转重定向页面redirect</a>"

@app.route('/redirect')
def get_redirect():
    return redirect('/index',code=302,Response=None)

if __name__ == '__main__':
    app.run(port=8080,debug=True)

这里我们使用了三次路由装饰器与视图函数并绑定URL链接,其URL分别为:

http://127.0.0.1:8080/index
http://127.0.0.1:8080/register
http://127.0.0.1:8080/redirect

首先我们进入第一个URL链接时并点击首页超链接就会跳转到第二个URL链接页面,跳转页面后,点击跳转重定向页面的超链接就会跳转到第一个URL链接页面,而在浏览器那一栏的URL链接为:http://127.0.0.1:8080/index。

那么问题来了,按道理应该是http://127.0.0.1:8080/redirect,,为什么会是:http://127.0.0.1:8080/index这个链接呢。这是因为我们通过redirect()方法重定向到第一个URL链接了。

按照上面的步骤依次打开URL链接并点击页面中的超链接,打开开发者工具,如下图所示:

我们发现在redirect中的状态码为302,点击redirect,如下图所示:

当客户端发送http://127.0.0.1:8080/register的网络请求时,服务端返回响应的响应码为302,客户端发现响应码为302,就找到location中的URL,请发送该URL的网络请求,所以我们在图中可以看到有两个index响应。

url_for

在实际开发中,路由装饰器和视图函数绑定的URL链接可能会很长很长,那么我们可以在路由装饰器@app.route()中添加endpoint参数,该参数作用是为视图函数起别名,语法结构如下所示

@app.route('/',endpoint='视图函数的别名')

为视图函数起别名,那么怎么使用该别名呢?这时我们可以使用url_for()方法,语法结构为:

url_for('视图函数名或视图函数别名')

示例代码如下所示:

from flask import Flask, redirect, url_for

app=Flask(__name__)

@app.route('/indexsdafsfsalkdhasfkljsdalf',endpoint='shouye')  #添加endpoint参数为视图函数其别名
def index():
    return "<a href='/redirect'>首页</a>"

@app.route('/redirect')     
def get_redirect():
    return redirect(url_for('shouye'),code=302,Response=None) 
if __name__ == '__main__':
    app.run(port=8080,debug=True)

首先我们为第一个视图函数添加了endpoint参数的值,该值就是视图函数的另一个名字,这样我们就可以通过url_for()方法并传入endpoint参数的值,就可以指向返回第一个视图函数的URL链接页面。

除了在Flask程序中使用url_for()方法,我们还可以在HTML模板文件中使用url_for()方法,HTML模板文件示例代码如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="{{ url_for('use_urlfor') }}" method="get">
        <input type="submit" value="提交">
    </form>
</body>
</html>

这里我们在HTML模板中使用了url_for()方法并传入了视图函数名,当然也可以传入视图函数的别名。

注意:在HTML模板文件中使用url_for()方式时,需要将该方法用双花括号围住。

Flask程序示例代码如下所示:

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def hello_world():
    return  render_template('index.html')  #渲染index.html模板文件

@app.route('/use_urlfor',endpoint='index')
def use_urlfor():
    return '在模板文件中使用url_for'   #返回字符串

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

运行Flask程序,访问http://127.0.0.1:5000/并点击提交就会跳转页面,跳转的页面显示内容为:在模板文件中使用url_for。

好了,有关Flask框架——重定向、url_for的知识就讲到这里了,感谢观看!!!下篇文章学习Flask框架——模板变量、控制块、过滤器!!!

公众号:白巧克力LIN

- END -

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 你可以使用以下代码来使用 Flaskredirecturl_for 函数: ``` from flask import Flask, redirect, url_for app = Flask(__name__) @app.route('/') def index(): return redirect(url_for('hello')) @app.route('/hello') def hello(): return 'Hello, World!' if __name__ == '__main__': app.run() ``` 在上面的代码中,我们定义了两个路由函数:`index` 和 `hello`。`index` 函数返回一个重定向到 `hello` 函数的响应,而 `hello` 函数返回一个简单的字符串。 在 `redirect` 函数中,我们使用了 `url_for` 函数来生成 `hello` 函数的 URL。`url_for` 函数接受一个函数名作为参数,并返回该函数的 URL。 当你访问 `index` 函数时,它会重定向到 `hello` 函数,并返回 `Hello, World!`。 ### 回答2: 在Python Flask中,`redirect(url_for(''))`函数可用于重定向用户到另一个路由或页面。`url_for()`函数用于生成路由的URL。 下面是使用`redirect(url_for(''))`的一般步骤: 1. 首先,导入必要的模块: ```python from flask import Flask, redirect, url_for ``` 2. 创建Flask应用程序: ```python app = Flask(__name__) ``` 3. 定义一个或多个路由,对应于不同的URL: ```python @app.route('/') def home(): # 处理首页的逻辑 return '首页' @app.route('/about') def about(): # 处理关于页面的逻辑 return '关于' ``` 4. 创建一个新的路由来处理重定向: ```python @app.route('/redirect') def redirect_function(): # 重定向到'about'路由 return redirect(url_for('about')) ``` 在这个例子中,当用户访问`/redirect`路由时,会调用`redirect_function()`函数,并执行`redirect(url_for('about'))`。这将重定向用户到`/about`路由。 总之,`redirect(url_for(''))`函数可以根据给定的路由名称生成URL,并将用户重定向到生成的URL。 ### 回答3: 在使用Python Flaskredirect函数时,我们可以通过url_for函数来生成重定向URLurl_for函数的参数是路由函数的名称,路由函数通常在Flask应用程序的路由文件中定义。例如,假设我们有一个index函数来处理主页请求,我们可以在redirect函数中使用url_for('index')来生成重定向到主页的URL。 在使用redirect函数之前,首先需要从flask模块中导入该函数。然后,可以在视图函数(也称为路由函数)中直接调用redirect函数,并将生成的URL作为参数传递进去。例如: ``` from flask import Flask, redirect, url_for app = Flask(__name__) @app.route('/') def index(): # 生成重定向到/about页面的URL return redirect(url_for('about')) @app.route('/about') def about(): # 返回关于页面的内容 return "这是关于页面" if __name__ == '__main__': app.run() ``` 在上面的例子中,当用户访问主页时,index函数会调用redirect函数来生成重定向到/about页面的URL,并将其返回给用户。 需要注意的是,在使用redirect函数之前,需要确保已经定义了重定向目标页面的路由函数。在我们的例子中,我们需要在路由文件中定义一个about函数来处理/about页面的请求。 总结起来,使用Python Flaskredirect函数很简单,只需导入redirecturl_for函数并在视图函数中调用redirect函数,并将url_for函数生成的URL作为参数传递进去即可完成重定向

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白巧克力LIN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值