路由跳转
应用场景
- 场景:
- 假设在新增信息页面,完成新增操作之后需要跳转到展示页面。
- 展示页面是个动态页面,它的逻辑是,如果有参数,则展示相关参数的结果,如果没有参数,则展示所有的信息。
- 解决:
- 使用
url_for()
生成 url ,再使用redirect()
方法完成路径的重定向。实现当完成添加的逻辑后,跳转展示的逻辑。
- 使用
使用 url_for()
函数的优点
相比使用相对路径,url_for()
函数有以下几个优点:
-
比直接使用 URL 的描述性更好。
-
可以只在一个地方改变 URL ,而不用到处乱找,可维护性好。
-
url_for()
函数生成的 URL 创建会处理特殊字符的转义和 Unicode 数据,比较直观。 -
url_for()
函数生成的路径总是绝对路径,可以避免使用相对路径导致的一些问题。 -
如果应用是放在 URL 根路径之外的地方(如在
/myapplication
中,不在/
中),url_for()
也可以妥善处理。
url_for()
的用法
url_for()
可以根据视图函数名生成视图的路由地址。- 语法:
url_for(视图函数名, *)
- 视图地址:str 类型,可以是视图函数名,也可以是由蓝图和视图函数组成的地址。
*
:允许传递参数。
- 用法:
- 用法一:
url_for(视图函数名)
- 用法二:
url_for("蓝图名.视图函数名")
- 用法一:
路由生成
使用 url_for(视图函数名)
即可返回对应视图函数的 url。
from flask import Flask, url_for
# 创建 Flask 应用程序实例
app = Flask(__name__)
@app.route("/helloworld")
def hello():
return url_for("hello")
# 运行应用程序
if __name__ == '__main__':
app.run(debug=True, port=5055)
可以看到响应返回了生成的路由地址。
蓝图路由生成
使用 url_for("蓝图名.视图函数名")
即可返回对应视图函数的 url。
from flask import Flask, Blueprint, url_for
# 创建 Flask 应用程序实例
app = Flask(__name__)
login_api = Blueprint("login", __name__, url_prefix="/login")
index_api = Blueprint("index", __name__, url_prefix="/index")
@login_api.route("")
def login():
print("登录,成功后跳转到首页")
return url_for("index.index")
@index_api.route("")
def index():
print("首页")
return {"code": 0, "msg": "success"}
# 运行应用程序
if __name__ == '__main__':
app.register_blueprint(index_api)
app.register_blueprint(login_api)
app.run(debug=True, port=5055)
页面中可以看到响应的内容中返回了生成的路由地址。
路由跳转
重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置。
可以在生成视图的路由地址后,使用 redirect()
方法实现路由的跳转。
redirect()
使得一个路由地址 A 与另一个路由地址 B 联系起来,执行 A 的时候会跳转执行 B。- 语法:
flask.redirect(location, code=302, Response=None)
- location 是一个链接地址,可以使用
url_for()
函数得到,也可以是静态文件地址。 - code HTTP 协议中的一个状态码。
- Response 是一个响应类。
- location 是一个链接地址,可以使用
- 用法:
- 用法一:
redirect(url地址)
- 用法二:
redirect(路由地址)
(可以结合 url_for 使用) -
from flask import Flask, Blueprint, url_for, redirect
# 创建 Flask 应用程序实例
app = Flask(__name__)
login_api = Blueprint("login", __name__, url_prefix="/login")
index_api = Blueprint("index", __name__, url_prefix="/index")@login_api.route("")
def login():
print("登录,成功后跳转到首页")
# return url_for("index.index")
return redirect(url_for("index.index"))@index_api.route("")
def index():
print("首页")
return {"code": 0, "msg": "success"}
# 运行应用程序
if __name__ == '__main__':
app.register_blueprint(index_api)
app.register_blueprint(login_api)
app.run(debug=True, port=5055) - 相应结果为:{"code":0,"msg":"success"}说明已经成功的跳转到了 index 路由。
- 用法一: